David Hall - 2006-12-20

The major focus of this release is incorporating some of the feedback
I've gotten from users.  There are two major changes that I'm making
based on such feedback. 

First, I'm trying to make it a lot easier for
new users to find and use the algorithmic functionality.  To that end,
there is now a new package that exposes the various supported algorithms
(find, filter/remove, merge/append, unique, transform, summarize, and
sort) in static
classes based on what they each do.  The old mechanism was a set of
facade classes in the util package that were grouped by the type of input
data structure.  Those facades are now largely deprecated (there are some
misellaneous methods that have not been moved -- their fate is still up
in the air somewhat).  In reorganizing the functionality, it has been
easier to ensure that everything is completely interoperable, and that all
of the algorithms can handle input in multiple forms.  Now, regardless of
the algorithm, you can start with an array, an iterator, or a collection
(or any other Iterable implementation), and mix algorithms together in
fairly arbitrary ways (there is one cavaet, however -- the copy forms only
support copying to a Collection).

Second, a popular suggestion is to make the functors available via static
methods in leiu of calling their individual constructors.  In some cases,
this may not work out as well as the suggestor believes, but nonetheless,
I've added static classes in almost every functor package to allow for
building the common functors using factory methods rather than constructors.
Included in this are many of the commonly suggested shorter forms; for example,
unary forms of math and comparison functors that take one argument at
construction and the other at each subsequent use.