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.
- this todo seems kindof important
- should we be setting the value on the closer backends when the user didn't ask for a set?
- assuming the answer to the above is yes, should we set the values on the other backends after `$i` too? what if they haven't the key? This `get` makes some assumptions about the way the user wants to use Hierarchy that I think should be documented (or they could just read the code).