Add #paging_state to RowsResultResponse
Pass the protocol version to Request#decode! and descendants
Add #result_metadata to PreparedResult
Mark Frame{Encoder,Decoder} with @private

[ci skip]
Make a small optimization in ExecuteRequest

Don't send zeroes, basically
Add support for requesting that the server does not send metadata to ExecuteRequest
Add basic unit test coverage of QueryResult

It's had coverage through being used all over the place, but it was time for some focused documentation-like specs.
Don't create a new TypeConverter for every rows result
Pass the frame length with the call to Request.decode!
Ask the server not to send metadata in the response to prepared statements

In v2 prepared statements get metadata about their results along with the metadata about the parameters. When a prepared statement has this data it can ask the server not to send it on every response, hopefully saving a lot of bandwidth.

This patch introduces LazyQueryResult and RawRowsResultResponse that make it possible to defer row decoding to the absolute last moment. It also adds PreparedStatement#result_metadata for access to the result metadata.

All decoder methods also get the frame length, even though it's only RowsResultResponse that uses it.