Inference for FCallExpression

* Proper inference of function calls
* Works properly with generic functions

```
# Generic identity function
f(x) = x

# `n` is inferred to be an Int
n = f(10)

# `s` is inferred to be a String
s = f("str")
```