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,
});
```
Why do we do this twice? we ask isTypeAssignableTo, and then if it returned false, we say checkTypeAssignableTo. Shouldn't we just do checkTypeAssignableTo?