Binary body

Additional code for supporting binary data for request and response bodies, as well as String data. The branch started out as one for chunked encoding, but that was getting difficult to complete in the time allotted and we needed the binary stuff first. So, there's also some preliminary work for chunked encoding, but that's not ready yet. We'll need to circle back and re-think the data model before we can do that properly.

There's plenty of re-factoring and re-organization of code. In particular, there are now a ClientConnector interface and a few classes that implement it. The interface allows for creating new client connectors with fine-grained customization of how the client side behaves in the transaction. For example, we could simulate a buggy client that incorrectly terminates connections, or sends bad headers, without interfering with the existing code for normal client-side operation. Also, there are classes like BodyReader and HeaderWriter, to remove code duplication.

Still needs docs, but I'll add those in a separate pull request.