Implement Player

I've split this up into a number of patches for simplicity, but these should be taken together.