Ep2 in progress

Hallo!

This is a bit of a "fake" PR - as it won't actually be merged, but just includes 2 branches that I temporarily created to show off the coding work so far for episode 2 (you'll see that the merge commit history is horrible - due to how I create these branches, I can tell you about it if you're curious :secret:).

The basic things that have been done so far are:
* Installing and using the serializer
* Authentication token system (a bit complex to teach and stay generic to Silex, but difficult to avoid)
* application/problem+json on authentication issues
* Endpoint for creating new tokens
* POST (create) and GET (single and collection) for Battle resource (including validation and security)
* HATEOAS: installation of the library, linking to self, linking Battle to Programmer, Hal, an embedded "link"

At this point, I'm looking for a very high level sanity check on implementation - I want to know if something is being done wrong or if something is going in the wrong direction. We can work on the smaller details of explanation, etc when the script is actually written.

Thanks!
access denied is a `403` http status code right? I'd rather send a `401` ("unauthorized")