Do not show noImplictAny errors when widening for a cast expression

In this example we are reporting the error as we widen. changing the behavior to not report errors as we widen in cast expressions, and additional optimization to only widen if we need to.

```TypeScript
interface IBar {
    b: number;
}

(<IBar> {
    b: null,
});
```
Rather than pass the flag everywhere, maybe getWidenedTypeOfArrayLiteral and getWidenedTypeOfObjectLiteral should be defined inside getWidenedType. Then they could just close over the supressNoImplictAnyErrors parameter.