Tracking attribute changes

This PR contains 2 updates to implement tracking changed attributes in ActiveRecord\Model, based on the Rails ActiveRecord implementation.

1. Updated the `assign_attribute()` method so that attributes are only flagged as dirty if the attribute value changes.
2. Added some new methods and structures to track the changes to an attribute:

```php
$model->changed_attributes()
# Returns a hash of all attributes that have changed and their original
# values.
# Example: $changed_attributes[$attribute] = $original_value;

$model->changes()
# Returns a hash of attributes that have changed with the original and
# current values.
# Example: $changes[$attribute] = array($original_value, $current_value)

$model->previous_changes()
# Returns the changes to a model's attributes before it was saved.

$model->attribute_was($attribute)
# Returns the original value of an attribute before it was changed
```