Compare two nested structures (dicts, lists and plain values) and report what changed, like a JSON diff in a config review tool.
Implement deep_diff(a, b) returning a list of changes in traversal order:
("added", path, value), ("removed", path, value) and ("changed", path, old, new). ("db.port"), and list indices use brackets ("servers[2]", "a.b[0].c"). The root path is ""."changed" at that path rather than recursing.Also implement diff_summary(changes): a dict counting each kind, with all three keys present.