Pull the separate stream ownership methods to a new interface FullDuplexStream that contains proper contracts.

See also #190.