Make RedundantCacheGroup properly handles partial failures

Hello @eford1, @chaosgame, @nicks, 

Please review the following commits I made in branch 'xiao-let-RedundantCacheGroup-handle-partial-failure'.

e350ba808399bd6d0f01416b99951918718da4e3 (2014-09-29 14:00:13 -0700)
```
Make RedundantCacheGroup properly handles partial failures

If it gets a partial failure, it will properly propogate existing results
and throw another partial failure.

It stops at the first time when an error happens and propogate that error
to upstream, in other words, it will fetch failed keys even if there are
other layers to try.
```
R=@eford1
R=@chaosgame
R=@nicks
This meant to mock calls to `setInterval` inside the `metrics` library, which we can't really modify directly.

We could do something like this:
```javascript
var setInterval = global.setInterval
global.setInterval = function (callback, delay) {
  setInterval(callback, delay).unref()
}
```

but it's easier to just override it to a non-op, since we don't need it for unit test anyway.