Range adaptor: cache

As discussed in this thread:
http://forum.dlang.org/thread/ovbjcmogezbvsxrwfcol@forum.dlang.org

This provides a range adaptor that cache the result of another range.

Meant as a lazy alternative to array. Not much else to say...?

Implemented as obscure type

Wording in documentation might suck.

Please destroy.
That's a declaration of the member field(s) `args`, defined as type `Args`. It's a pretty bad name, but I don't really know how else to name a field (fields) that carry both front and back. Or type names for that matter... `CacheTypes` and `caches`? maybe instead?