Support for go-like chan.select()

I had a first go at adding the `select()` functionality.
Here's the PR with tests and doco.