Refactor to middleware and provider pattern

The purpose of this pull request is to start moving servicebus toward the ability to have any number of pre-send or post-receive message processor / middlewares as well as to make it possible to use servicebus with messaging protocols other than RabbitMQ. 

I'm starting the pull request early to get feedback as the changes progress.