Refactor code generation to allow us to diff generic expressions and not just fields

This patch refactors the diffing generator code to allow us to diff
field getters and other expressions instead of just fields themselves in
the future.

It does so by creating a tree of groups to diff (DiffGroups)
that store the subgroups to diff as well as the expressions to diff.
For now the expressions are just the field accessors. In the future,
they will contain expressions like BorderLeftWidth() - a public getter
for border-left-width, and HasTransform() - which is not a field or
its getter.

Diff: https://gist.github.com/d14529581f729e810842254cbf7dc1f5/revisions

BUG=710938

Review-Url: https://codereview.chromium.org/2879563002
Cr-Commit-Position: refs/heads/master@{#471666}
6 files changed