Begin reworking map negotiation

When a client connects it's sent a map_offer message. The map_offer
entity is a string containing a hash of the map loaded by the server.
The client, upon receiving the offer checks if it has the map available
to it. If not, it responds with a map_request message -- which has no
entity. Upon receiving the map_request, the server responds with a
'map' message with the base64-encoded map contents as the entity.

In doing this I realised it'd probably be best if handlers were
std::function, so I've changed them to that. I wanted to use a typedef
for it but I don't understand this shit so it's commented out whilst
I wait for my knight in shining armour to come along and tell me how
the fuck it works.