Refactored to use the new RabbitMQ java client (3.3.1)

* Use a single TCP connection and work at channel level in producers and consumers
* Removed reconnection related code, now uses the reconnection logic provided by the java client
* De/serialization has been decoupled in two new interfaces
perhaps i'm wrong but looks like ```declareExchanges``` could be read/write by multiple threads, if so, looks like it should be ```volatile``` in order to enforce only one initialization.