Bugfix/closer match to golang channels

In go, it's the responsibility of the sender to close channels and it should always be safe for receivers to receive from a channel without causing a panic. In the case of Agent, we were raising exceptions when receiving on a closed channel. This changes channels so that they behave more like go's.

This addresses issue #20.