Converts the Value to a JVM type T in the following way:
If the type is an interface not annotated with @FunctionalInterface then a special proxy is returned that
knows how to map JavaBean style property methods on that interface to JavaScript properties.
Otherwise, the Value.as method is used with a TypeLiteral so generics are preserved and the best possible
translation occurs.