Major Refactoring and cleanup

I propose this PR as a base for next version of Pusher API.