Made more robust

* Added an inactivity timer for more retries
* Separate `destroy` and `cleanup` methods
* Name changing OCD
* Miscellaneous tweaks for better abstraction
[fix test] fix test in weird edge cases
[fix] bind the backoff callback to the correct context
[fix] minor fixes

* add some magic reconnect defaults
* fixup the exp-backoff callback
* remove the listeners after the stream is ended
* *Note* The above still may cause the 'end' event to never be listened on when it is destroyed