The attached patch is a port of LLVM's PatternMatch infrastructure for SIL.
LLVM's pattern matching infrastructure is how much of InstCombine is implemented
and the brevity of its pattern matching should be a boon to SILCombine's
implementation as well.
Many basic matchers have been implemented, but of course many more *could* be
implemented (i.e. this is a work in progress).
Swift SVN r9650