Read/write attribute directly from @attributes to match ActiveModel

Resolves #113

This allows overridden getters/setters to be written like ActiveModel getters/setters and call `read_attribute` and `write_attribute` to get the raw value from the attributes hash. This previous behavior was unexpected to users bringing existing code from ActiveModel.

The other benefit of this change is that `ActiveModel::Dirty` can be included and will actually behave properly since it overrides `write_attribute`, expecting it to be called when a setter is called.

While I feel strongly that this should be fixed, it's a very significant change and should probably accompany a decent version bump. Thoughts?