Add beast::asio::basic_streambuf (RIPD-661):

This is class whose interface is identical to the `boost::asio::basic_streambuf`, and uses an implementation that stores the data in multiple discontiguous linear buffers, expanding and shrinking as needed. The implementation is complex, with the core algorithm implemented in these functions `prepare`, `commit`, and `consume`. These functions need to be audited line by line for correctness. The Overlay peers are modified to use this new streambuf (its a drop in replacement for `boost::asio::basic_streambuf`). rippled runs connected to the network without assertions or crashes using this code.
Reviewers: @rec @JoelKatz @ximinez

It's less about asking why the code is not using `unique_ptr`, as asking where is the line between using `unique_ptr` and dropping down to use an `Allocator` and post-allocation `new`.

Although now that I've given it more thought, I think the answer is that it's a consistent way to get the object immediately followed by that chunk of uninitialized memory. (Security note: Should we zero out the memory before deallocating it?)