Implement lazy recursive reads from Etcd.

In case if Vulcand serves hundred of locations, naive implementation issues
hundres of requests to Etcd to retrieve all hosts, what causes hosts endpoint
to take around 10 seconds to complete. This implementation uses caching
for local recursive reads what speeds up the hosts endpoint 10x and reduces
the load on etcd cluster.
Wanna write this more compact?

```go
if n, err := c.findNode(key, child); err == nil {
  return n, nil
}
```