Added asynchronous and buffered channels

This appears to be working!
I've yet to decide if its worth trying to remove some code duplication
between similar channels - presumably any holy programmer would say its
worth it. Its a pain because of the JavaDoc... I'll get round to it
Added TODOs for code duplication