A protocol based on fully Aeson-deriving all of the relevant types

This is a very "dumb" encoding that simply mirrors the structure of the
Haskell types.

Then the client has to do most of the work of interpretting what those
types mean.