Make handshakes more robust

This pull request makes handshaking more robust by buffering switch messages while the controller awaits a `FeatureResponse`. Once the controller receives a `FeatureResponse` it will send a `Connect` event through the pipeline first (the single instance of message reordering) along with all buffered messages in the order that they were received.

In order to do this, the `Trans.stage` type had to be changed to have a return type of `'a list Deferred.t` instead of `'a option Deferred.t`. This will come in handy later as well, I believe.