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
sorry, this piece is a little confusing.

At this point, if `keys.length === missedKeys.length`, it means that this level doesn't get any key hit, and the next level throws an error. In this case, we don't need to construct a `PartialResultError`, we just re-throw whatever the next level throws.