refactor(dccd): Simplify both the interface and the implementation

@mhevery this is the change we've talked about last week.

This PR handle the Collections only, Maps are still TBD.

There might be a few things to polish but I think the PR is mergeable. It brings:
-  A cleaner interface (`AddedItem`, `RemovedItem`, `MovedItem` and the likes are implementation details. The IF now only exposes a `CollectionChangeItem`),
- The implementation is also cleaner, I'm happy when I see the amount of LOC going down,
- I've also added some inline docs.

There's not perf impact to expect for this change (might be marginally faster ?) however having a simpler code is always good for maintainability.

If you like it please merge it, I'll do the map as part of an other PR. Thanks.

/cc @caitp