Basic version of a season simulator.

SeasonSimulator now uses a GameSimulationEngine interface to simulate
the scores from particular weeks, and it tracks the scores of players
across teh complete season.  Scores are drawn from normal distributions,
and there's a very basic injury model.
Extracted Starters and GameSimulationEngine.
Refactored simulation code to new package.
Adding equals, hashCode methods to Slot classes.
Rewrote the Starters class.

Added accessors, and a method to find if there are 'unmatched' slots.
Updated the constructor to take both Slot[] and Player[] arrays
simultaneously.
Added three new scoring methods to SeasonSimulator

Added three new methods related to scoring, to SeasonSimulator.
1. Updated SeasonSimulator with a 'reset' method, so that we can reset
   the season simulation in-place and run a second simulation.
2. Added a method to find the optimal set of Starters for a given Roster
   in any week, from the state embedded in the SeasonSimulator.
3. Added a method to score, in any week, any set of Starters from the
   included in the SeasonSimulator.

These three methods (mainly, the second and third) should allow us to
score any given Roster from draft day, based on simulations of an entire
season.
wip starting work on Roster.value()
Added rosterScore to calculate the season value.

Roster.rosterScore takes a complete simulated season, and estimates the
value of a given Roster from that season.
Adding a reminder TODO comment, about Starter selection.

Starter selection is currently greedy: it walks the given set of Slots,
and chooses the best available (unchosen, un-injured) player for each
Slot.

However, this doesn't always produce the best scoring set of Starters,
since it depends on the order in which the Slots are given.

This commit adds a to-do comment, about fixing this problem in the
future...