Fix MSVC build.
Fix and improve function+converters implementation.

The old one used multiple inheritance from tuple. The casts from void* to
converted_function_base<F> were invalid and would certainly fail when the tuple
is nonempty (always with MSVC's library where even tuple<empty types> is
nonempty).

The new implementation stores everything as separate upvalues (see new constants
fn_upval_*). Additionally, the all_empty metafunction is used to detect if all
converters are empty, instead of relying on the emptiness of a tuple containing
them. Only if there are nonempty ones, a additional upvalue storing a tuple
containing the converters is used.
Simplify light function detection.