Fix goroutines in chan-throttler* logic

The two goroutines in `chan-throttler*` were set up to loop infinitely, assuming that the loop would park on the bucket channel put/take operations. Since the bucket channel never closes even if the throttled input channel does, these goroutines will stay parked (and thus not garbage-collected) forever.

I made some minor changes to the looping logic to address this. Now, both loops within the go blocks only occur when the bucket channel is open. Once the throttler input channel is closed, along with closing the output channel, the bucket channel is now closed too. This stops both loops within the go blocks which allows them to return and eventually be cleaned up.

I also replaced the pipe macro invocation, and since it wasn't being called anywhere else, removed the macro. If you'd like, I can put it back.

All of the midje tests pass. If there's further testing you'd like me do, let me know.

Cheers!
It's ok if you remove this; its purpose was to abstract away a bit of functionality so that the main logic remains clean. You can consider putting this back as it was and using its return value (`nil` when `to` is closed or the throttled channel is closed, `true` when the put suceeds) as a way of deciding whether to close `c'` or not below.