Deep Snapshots

Refs #1 

This PR should be able to make a more accurate changeset. The objective is to have every child of `Snapshot::$data` be a `Snapshot` instance, adding also a raw value which will be untouched.

The problem is, this PR brings some BC Break (the `AbstractSnapshot` is gone, replaced by a classic `Snapshot` class, and some other things will be brought on the `Set` class).

More coming soon.

-------

### Update

So, to solve #1's problem, I had, when taking a snapshot of something like an array or an object, to take a recursive snapshot. Whenever I encounter an array, i am taking a `ArraySnapshot`, and when it is an object a `ObjectSnapshot`... Otherwise, I take a simple `Snapshot`, storing the raw value of the data (and leaving `$data` empty, as it is not likely to be used afterwards, especially as this *should* be used in a recursive context and not the root context).

This may reduce a little bit the performances, but it should do the trick ! :)