Add optional deep dirty tracking

Adds opt-in change tracking for deep property types (arrays of simple values, embedded documents, arrays of embedded documents). My team has been using this in production for awhile now to provide detailed audit trails of complex documents. For example it enables "Sarah added 'abc', 'def' and removed 'ghi' from the array of tags" or "Sarah changed property X from 'Y' to 'Z'" on an embedded document. The README has more details.

It was previously discussed that this should be optional due to potential performance issues (https://github.com/langalex/couch_potato/issues/73) so it is a separate module users can include on a model-by-model basis.