Refactor and cleanup python2 code
- Rewrite the Stream Managment implementation
- Add new events to give clients more control over the connection process
- Add new method bind(), so the client can choose when to bind
- Remove support for legacy auth XEP-0078
- Pass auth failure text and reason to AUTH_FAILED event
- Sort imports
- Remove python2 legacy code