Use checkExpression in checkSpreadExpression
Use checkExpression in checkSpreadExpression

Not checkExpressionCached. checkExpressionCached ignores ongoing control
flow analysis, which causes the following loop to make the compiler
recur infinitely:

```ts
let a = []
for (const x of []) {
    a = [...a]
}
```

mihailik/TypeScript,Eyas/TypeScript,mihailik/TypeScript,thr0w/Thr0wScript,DLehenbauer/TypeScript,weswigham/TypeScript,erikmcc/TypeScript,nojvek/TypeScript,microsoft/TypeScript,Microsoft/TypeScript,minestarks/TypeScript,Microsoft/TypeScript,basarat/TypeScript,synaptek/TypeScript,TukekeSoft/TypeScript,SaschaNaz/TypeScript,mihailik/TypeScript,thr0w/Thr0wScript,SaschaNaz/TypeScript,erikmcc/TypeScript,RyanCavanaugh/TypeScript,chuckjaz/TypeScript,jwbay/TypeScript,jwbay/TypeScript,microsoft/TypeScript,alexeagle/TypeScript,nojvek/TypeScript,basarat/TypeScript,DLehenbauer/TypeScript,donaldpipowitch/TypeScript,chuckjaz/TypeScript,synaptek/TypeScript,donaldpipowitch/TypeScript,mihailik/TypeScript,chuckjaz/TypeScript,TukekeSoft/TypeScript,nojvek/TypeScript,kpreisser/TypeScript,basarat/TypeScript,kpreisser/TypeScript,Eyas/TypeScript,alexeagle/TypeScript,Microsoft/TypeScript,weswigham/TypeScript,weswigham/TypeScript,jwbay/TypeScript,alexeagle/TypeScript,kitsonk/TypeScript,donaldpipowitch/TypeScript,minestarks/TypeScript,kpreisser/TypeScript,kitsonk/TypeScript,erikmcc/TypeScript,SaschaNaz/TypeScript,basarat/TypeScript,synaptek/TypeScript,thr0w/Thr0wScript,kitsonk/TypeScript,erikmcc/TypeScript,synaptek/TypeScript,jwbay/TypeScript,TukekeSoft/TypeScript,microsoft/TypeScript,Eyas/TypeScript,minestarks/TypeScript,DLehenbauer/TypeScript,DLehenbauer/TypeScript,chuckjaz/TypeScript,RyanCavanaugh/TypeScript,RyanCavanaugh/TypeScript,nojvek/TypeScript,Eyas/TypeScript,SaschaNaz/TypeScript,donaldpipowitch/TypeScript,thr0w/Thr0wScript