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

Actually this does not work. The current design creates a new instance of RetryNextServerOperator when caller calls `retryWithSameServer()` and recursively subscribe the same instance of the operator during the retry process. So this counter has to be at instance level. Of course, this will be changed when we try retry(predicate) approach.