[WIP] Add general purpose Attributes

* [x] Implementation
* [x] 100% test coverage
* [ ] Documentation

Fixes #100 
Supersedes #40
Fixes #84 
Unblocks #97
The `set` methods in this class don't return `$this` for the fluent interface like the other implementations of `AttributeBag` do.  Is that on purpose?  Should the fluent interface be part of the `AttributeAware` and `AttributeBag` interfaces?