Duplicate the standard I/O file descriptors by default.

If someone wants to work directly with the original, they can pass 1,0 to the lower-level
class method.
Comments and docs.
Get rid of the protocol module.

Having it as a distinct file made viewing the exception hierarchy in the generated
documentation non-effortless.
spell it out