dev/ci: rewrite ChangedFiles as bitmask Diff
Created by: bobheadxi
Rewrites ChangedFiles with a new bitmask-based implementation, Diff, that enables more flexibility over programatically iterating over our various Diff options. See this in action in https://github.com/sourcegraph/sourcegraph/pull/30532, which is the end state of this stack of changes. Demonstrative example:
Conditioning on Diffs now looks like this:
if diff.Has(changed.Client | changed.GraphQL) {
Semantically, this reads: "diff has changed GraphQL or changed Client". Perhaps a little awkward, so I'm open to suggestions about the semantics here.
Also introduces testing that iterates over Diff types and ensures each has relevant properties defined, as well as tests covering some of the new and old functionality.