add support for union and nullable types
support variadic functions

By "support" here I mean ignore the variadic call arguments if we
know wrapped function supports them.
document Union and Nullable