Refactoring of load balancer execution API and add ExecutionListener

* Refactored the load balancer execution API as part of #161
* Addressed issue #146
* Added meta info to Server to capture additional service and instance information in deployment environment

Is there a valid use case for retrying on the same server?  Shouldn't we always try a different server on failure?