[MemorySSA] Fix exponential compile-time updating MemorySSA.

MemorySSAUpdater::getPreviousDefRecursive is a recursive algorithm, for

each block, it computes the previous definition for each predecessor,

then takes those definitions and combines them. But currently it doesn't

remember results which it already computed; this means it can visit the

same block multiple times, which adds up to exponential time overall.

To fix this, this patch adds a cache. If we computed the result for a

block already, we don't need to visit it again because we'll come up

with the same result. Well, unless we RAUW a MemoryPHI; in that case,

the TrackingVH will be updated automatically.

This matches the original source paper for this algorithm.

The testcase isn't really a test for the bug, but it adds coverage for

the case where tryRemoveTrivialPhi erases an existing PHI node. (It's

hard to write a good regression test for a performance issue.)

Differential Revision: https://reviews.llvm.org/D44715