add "_ unless _" and normalize it into an if expr.
change FunctionType to UserType to fix a bug.

the default canCoerceFrom impl was too simple/restrictive, and wouldn't notice that a function that takes an "Int -> Int" parameter should allow an "(n: Int) -> Int" to be passed in. now functions are just UserType, which has more complex (and correct?) coercion.
add a couple of tests.