Add target data BEFORE passes or the optimizer is confused.
vtbl is now a void*
use named struct for vtbl
LLVM expect a function to always exists
Compile time tuples keep their type.