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.
Throughout this code there are lots of calls switching `increment`s to `decrement`s and visa-versa even though
`Backend` has both `increment` and `decrement` in it's definition.

I'm not sure why, especially this one. I think we should pass the `decrement`s and `increment`s down through the linked-lists of `Backend`s until we arrive at a backend that is incapable of `incrementing` or `decrementing` the `$amount`. Then, and only then, we should do this `increment` to `decrement` swapping.

EX: maybe `Memcache` can only handle `increment` and `decrement` calls with positive integers. The `Memcache` backend should be responsible for swapping these calls appropriately, and all the other `Backend`s on top of the `Memcache` `Backend` should just pass the `increment`s and `decrement`s down the line.