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,
});
```
Not if we just closed over it (see my comment from earlier about nesting the subroutines inside getWidenedType).