TFunction is like a UE version of std::function. It is nullable, re-assignable and 'owns' any callable object bound to it.
TFunctionRef is non-nullable, non-assignable, non-owning callable object proxy and is intended to be used for passing lambdas to functions to be called without transferring ownership and without making the function a template, which means it can be FAST.
Bunch of new metafunctions to make this work: TIsFunction, TDecay and TRemoveExtend, modelled on their std:: equivalents.
New TFunction and TFunctionRef visualisers to allow you to see/modify the contents of lambdas after being bound.
TFunction/IFunction code in ShadowRendering replaced with this new stuff.
#codereview robert.manuszewski,gil.gribb,mike.fricker
[CL 2335656 by Steve Robb in Main branch]