Adds the ability to use different payloads (#710)
Motivation:
gRPC should be agnostic to the type of payload that it sends to the peer to allow for other message types to be used (e.g. Flatbuffers).
Modifications:
- Make the generated code generic over `GRPCPayload`
- Provide a default implementation of `GRPCPayload` for `SwiftProtobuf.Message` in `GRPCProtobufPayload`
- Update generated code such that request and response types conform to `GRPCProtobufPayload`
- Shuffle around some of the server code to minimise payload copies
Result:
gRPC can send/receive payloads which conform to `GRPCPayload` instead of `SwiftProtobuf.Message`