[WIP] Add general purpose Attributes

* [x] Implementation
* [x] 100% test coverage
* [ ] Documentation

Fixes #100 
Supersedes #40
Fixes #84 
Unblocks #97