Initial version for code review

Because the initial development was occurring on master, there isn't an easy way to do code review. This pull exists solely as a means to code review the entire project. Any changes will be put straight into master and this pull will be closed and the `initial-code-review` branch deleted. All future development will use pull requests into master to facilitate code review.
> Otherwise this class wouldn't be very useful because the user would have to manage setting retrieved values on all of the backends that don't already have it.

I was thinking `get` could just try to get the value and `getAndSet` would get it then set it on all the other backends that didn't have it. You mentioned above that this is expiremental, so as long as we can remember our different ideas for this class in mind then we can find a good compromise later.