Decode everything in the request decoder

Before, the request wrapper was the only thing decoded in request
decoder. The request was decoded inside the service and the service
dispatcher handled parsing the service and method names into the
RPC service and method. This made it impossible to interact with the
request or various request meta data in middlewares without doing
everything being done in the service dispatcher. It also made the
dispatcher responsible for a lot of validation enforcement.

Instead, the whole request wrapper, including the request is decoded in
the request decoder and the env is populated with the meta data so it's
available to other middlewares that might need it.

Since the service is no longer decoding the request, it is initialized
with the env object, which contains everything it needs. This has the
added benefit of making the env available inside any RPC endpoint.