Wrote most/all of the algorithm
Added some documentation about assumptions
Changed some stuff
Wrote some stuff to reduce assumptions
Changed our while loop to use the terminate method
Changed selectWithReplacement to be a selector which is passed in as
an argument
Changed some things that Nic brought up on GitHub.
Changed our arrays back to sets
Fixed stuff. Crossovers is using closures now.
Added a toString and changed some minor things
Merge remote-tracking branch 'JohnMcCall/Algorithm20' into GA
Got the the GA to run (which I'm pretty sure it hadn't ever run before).

I needed to change the call to tournamentSelection so that we passed in
a List instead of a Set since TournamentSelection needed a List. Also
the add() call used to add the new children was called with both of the
children in one call, which didn't work and I had to split it into two
separate calls to add().

I also changed the name of the search method from geneticAlgorithm() to
maximize() so it matches the function named used in other searchers. 

Lastly, I added a simple smoke test so we know that it runs.