Player refactor

Rebuild the player app to more closely match Flask standards. Also added some very basic tests.