Optimize use of HashSets when computing rule feature data in TargetedStyleRecalc.

In particular: replace the HashSet<AtomicString> used to keep track of which
classes are in selectors with entries in the HashMap<AtomicString,
DescendantInvalidationSet> invalidation set map. This allows us to avoid
duplicate storage of the data, as well as avoid redundant computation.

Also replace HashSet with Vector for storing an intermediate object of classes to
add to a descendant invalidation set. It doesn't need to be a HashSet since the final destination invalidation set will store in a HashSet and remove duplicates.

When running the SelectorCountScaling performance test in this CL, previously it was about 5% slower when using the TargetedStyleRecalc flag.
Now some of this overhead is removed. However runs without the flag are also
made about 1% faster since they don't store local copies of the hash sets temporarily during rule feature construction.

The end result is that the TargetedStyleRecalc version is within < 4% on the benchmark, and both versions are improved from today.

BUG=335247
R=eseidel@chromium.org, ojan@chromium.org

Review URL: https://codereview.chromium.org/165353005

git-svn-id: svn://svn.chromium.org/blink/trunk@167244 bbb929c8-8fbe-4397-9dbb-9b2b20218538