Performance Improvements

Several were added here. They are:

1) Added specific calls to retrieve HealthChecks and PoolID from services, rather than deserializing the entire service tree every time
2) Added a simple caching layer for Elasticsearch to avoid deserializing constantly
3) Limited calls to ZooKeeper to get running services while processing health check results

This removes the UI as a major contributor to serviced's CPU usage. In addition, it drops "resting state" CPU usage from 80-90% (for a started, but not populated, Core system) to around 20%.

The bulk of that remaining 20% is in TLS handshakes. Another pull request is coming to deal with that to the extent possible.