Add beast::asio::basic_streambuf:

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

Do what the STL does with `basic_string` and `string`:

    template <class Allocator>
    using const_buffer = basic_streambuf<Allocator>::const_buffers_type;

    // later...
    template <class Allocator>
    const_buffer<Allocator>::const_buffer (list_iterator first, list_iterator second, 
                                           size_type in_pos, size_type out_pos)