Rebuilt pretty much the entire codebase

Descriptors now provide a proxy layer between a token and the current
board state.  I.E. given a board state, the Descriptor will find the
current state of it's token.
This makes copying the board state much easier, since there are no
shared references.
There are now some nasty generics, especially in the ships package.