Fix ambiguous overloading, bad return type forcing

Fixing issue: https://github.com/ContinuumIO/anaconda-issues/issues/183

- introduce new `ir.Expr.cast` to perform casting before return value
- try to resolve ambiguous call