add select support in channel

select allows you to wait for an operation to proced. More info on the go page:

http://golang.org/ref/spec#Select_statements