Minor Chan tweaks

The first commit does a bit of a shuffle with how things are organized, but there are no major changes. The goal of the commit is to simplify how things are stored with respect to the concurrent queues in use (no longer producer/consumer halves).

The second commit fixes a deadlock which was uncovered in servo. I attempted to fix everything up, and I think that it's all in order now, but as always lock free code is pretty hairy so another pair of eyes would certainly be useful.

Cursory benchmarking of this change does not show any impact on message sending performance, but I have not done super in-depth benchmarking.