Make ProtocolWrapper a state machine

* add an open event that's emitted before connected or errors
* implement proxies for all transport's methods
* emit errors before more specific events (i.e. backoff)
Emit wrapped transports from transport strategy

* use new protocol behaviour to wait for connected messages
Stop wrapping transports in connection manager
Implement Handshake class with specs
Remove event emitter interface from Handshake

* pass a callback to the constructor instead of ready event
Implement Protocol class with specs
Implement Connection class
Update ConnectionManager and TransportStrategy

* use handshakes and new connection objects
* update their specs
* update Pusher integration test
Remove ProtocolWrapper
Update testing configs
Remove Handshake#process method

* refactor TransportStrategy and ConnectionManager to use new interface
* fix all specs
Move handshake message processing to Protocol
Add some missing specs for Connection
Remove outdated comment from SockJSTransport
Use Timers in ConnectionManager
Document new classes from connection directory
Add a missing semicolon in Protocol specs
Merge branch 'dont_abort_before_connected' into r2.0.3
Update version for 2.0.3 pre-release
Use `Boolean` instead of `!!` in Flash check