Player refactor

Refactored the player class.  There is still more to do, marked by @todo tags, but they are all dependent on how other team members refactor their code.