upgrade our template signatures to sane ones, handle lifetimes for functions passed in, support Functions returning Functions, add GetFunction with type parameters, implement everything