Add an interface by which plugins can hook einhorn's state passing

If a plugin defines a State module, it will be serialized and then
reloaded when einhorn itself reloads.
Update tests for new plugin interface
Bump version
Refactor protocol message generation code
Include request ID in response if it was provided
Add subscriptions, use them for upgrades
Handle multiple responses to a client request
Maintain backwards compatibility for old clients.

If the client sends a request_id we know it supports the new protocol,
otherwise we make sure to only send one response for each request.
Send useful messages to Einhornsh when upgrading.
Make log message less confusing
Better handling of invalid commands.

This fixes the problems noticed by gdb at
https://github.com/stripe/einhorn/pull/28/files#r5829490

It also fixes the error handling to work in Ruby 1.9 (which uses Psych to
parse YAML) and also handles syntactically valid yaml that results in an
invalid command (eg: '--- false')