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

Here is decent test code for using allocator_traits: https://ideone.com/07dg0T

This is both a test to see if it is working on your platform (the output is correct on ideone for gcc), and instructions for how to use it in an example container C.  The example is very carefully written to be exception safe.  It will not leak memory if a construction of A, or an allocation from alloc_ throws.  Properly implemented copy and move members are not included here.  Nor is treatment for "fancy pointers."  But this gets / proves support for allocator::construct and destroy.