beam/inmem: PipeSender and PipeReceiver return clean nil values

This is necessary because `(*PipeSender)nil` is not equal to
`(interface{})nil`.
beam/inmem: complete Copy implementation

Copy can now handle arbitrary nesting of streams, without knowing the
underlying type of either the source or destination.

It does this by attempting `SendTo` and `ReceiveFrom`, then if that is
not supported, falling back to nested copies in separate goroutines.
beam/inmem: fix StackSender

StackSender is now more solid, with the beginning of a test harness.
beam/inmem: Buffer is a convenience message buffer
ur: example file using the Hub object