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,
});
```
Nit: I'd rather the noImplicitAny flag be checked first, but I suppose it doesn't matter.