* ActiveModel::Dirty
** Basic support for dirty tracking
** It does not bubble up any changes to casted models currently
* ActiveModel::AttributeMethods
** Attributes are now read and written through ActiveModel
** This also allows you to add your own attribute methods with
prefix suffix and affix names. For more information check out
ActiveModel::AttributeMethods::ClassMethods
Public Facing
* through either :protected or :accessible8 flags
* prevents protected attributes from being set in mass assignment
Developer Facing
* refactors #initialize and #update_attribute_without_saving
to use same private methods to set attributes on ExtendedDocument
* adds new mixin to do protection
Signed-off-by: Tapajós <tapajos@gmail.com>