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

why?  isn't what you've written exactly the same?  you aren't doing anything to invalidate the iterators?

Or, if there is some reason the iterator gets invalidated, please make a note of that here.  Also, just use `i` instead of `iter` (because `i` is "less surprise") and increment in the for statement, please.