Extract request decoding into a middleware

Decode the request and populate the env before continuing up the stack.
If a decoding error occurs, rescue it, set the response and don't
continue up the stack.
Extract response encoding into a middleware

Invoke the stack, encode the response and store it in the env. If an
encoding error occurs, a generic Protobuf error is encoded and returned.
Extract exception handling into a middleware

Rescue exceptions that are raised and set the response. If the exception
rescued is not a Protobuf error, it is wrapped in a generic Protobuf
error.
Move behavior into a method to avoid accessing ivars

Accessing ivars is weird and the alternative (explicit self) is weirder.
By moving the behavior into a method, we can avoid both.
Merge pull request #162 from localshred/exception_middleware

Extract exception handling into a middleware
Merge pull request #161 from localshred/encoder_middleware

Extract response encoding into a middleware
Merge pull request #160 from localshred/decoder_middleware

Extract request decoding into a middleware