[WIP] Add general purpose Attributes

* [x] Implementation
* [x] 100% test coverage
* [ ] Documentation

Fixes #100 
Supersedes #40
Fixes #84 
Unblocks #97
Couldn't this unintentionally remove a prefix if the prefix is purposefully included multiple times using nested attribute bags?  For example, `commit.commit.sha`.