Rewrite FindAndDeclareBuiltinVariables to rely on ProgramUsage.

Rather than scan every expression in the program to look for built-in
variables, we can check the existing scan from ProgramUsage to quickly
find every built-in variable and add a declaration for it.

Previously, we got free determinism because the declarations were
created in program order--we added them as we found them during a
ProgramVisitor run. Now, to avoid nondeterminism, we must enforce a
consistent but arbitrary order. For interface blocks, we order based
on the name of the block. For global variables, we order them based on
the name of the variable.

Change-Id: I65f74cf52df9552a47e119d4153b42feced36c48
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/563123
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
263 files changed