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
What `_flattenData` does is actually very different than the above.

We need to construct the `data` object from the results (which is an array) from the current level of cache (which is what line 134 to 136 does); and we need to modify the error to meet what `_flattenData` expects.