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,
});
```
Is this compiled with noImplicitAny?
Also, please add a test for downcasting. This one only exercises upcasting, so the suppress... flag is not being tested.