Hide Attr implementation and attributes

* Provide Attr interface
* Move implementation to its own file