Polymorphic embedded support + test refactor + #tracked_changes and #tracked_edits methods

Hi, I've added the following features:

* Support for polymorphic embedded classes (merge of "getaroom" branch)

* Refactor of test code, by using lazy-loading (`#let`) and initializing classes only once, tests now run in half the time.

* New methods to `Trackable`:
   * `#tracked_changes`: returns a hash in `{field: {to: val1, from: val2}}` format
   * `#tracked_edits`: returns a hash in format:
      ```ruby
      {add: {field: val}, remove: {field: val}, modify: {to: val1, from: val2}, array: {add: [val2], remove: [val1]}}` format; considers deep-array value comparison.