rfc4251: move remaining non-inline functions to impl file
rfc4251string: drop unused and dangerous constructor from just a pointer

better use std::istringstream or boost::iostream::array_source
use a boost stream directly

instead of declaring an intermediate stream_buffer
use boost::iostreams instead of std::stringstreams

boost::iostreams::array_source instead of istringstream
boost::iostreams::back_insert_device instead of ostringstream

this should save at least one copy each and still has length checks (input)
or dynamic growth (output)
add more #include's, add using's for often-used names
factor out cloexec setting and stream exception arming
throw system_error instead of calling perror, exit
also replace custom fatal errors with exceptions
use a mutex for fd creation and forks

so we can have the CLOEXEC flag applied before a concurrent fork&exec.
use select() to avoid blocking while holding the mutex.