'as' expression and argument conversions (fix issue #102)

Implement 'as' expression:
```x as Int64```
desugars too:
```alias overload asExpression(value, #T) = T(value);```
The type consructor overload is a quick default and should probably be changed.

'as' argument conversions:
```
[T when Integer?(T)]
overload foo(x:T as Int64, y as Float64) = T, x;
```
desugars too:
```
[T when Integer?(T)]
overload foo(forward x:T, forward y) = 
    forward ..foo(T, x as Int64, y as Float64);

[T]
overload foo(#T, x:Int64, y:Float64) = T, x;
```

Add couple of simple tests.