Generic parameter are not implicitly assignable in the Expression trees, although they could be.
For example they could be assignable to object, their base type constraint or interface constraints.
Remove special casing for generic parameters in TypeUtils.AreReferenceAssignable.
Make sure that box/cast/unbox operations are inserted by the LambdaCompiler when necessary.
Probably best implemented via visitor that inserts explicit converts (UnemittableExpressionVisitor).
Search for TODOs.