Make Request#write take the protocol version

Also refactor the FrameEncoder specs
Make QueryRequest compatible with the v2 protocol
Make protocol version configurable from AsyncClient
Make ExecuteRequest compatible with the v2 protocol
Remove a dead line of code from FrameDecoder
Add bound variable support to QueryRequest

Currently only supports string variables. This required adding an extra parameter to the constructor, and that required changes all over the place.
Add bound variable support to Client#execute
Update the Client#execute docs with bound variable info