msgr: merge AsyncMessenger

This is Haomai's branch, with a few cleanups and fixes on top.  I also
added type 'random' to randomly choose between simple and async.