* -----------------------------------------------------------------------------------------------
* This system allows you to call member functions on C++ objects in a generic, yet type-safe way.
* Using delegates, you can dynamically bind to a member function of an arbitrary object,
* then call functions on the object, even if the caller doesn't know the object's type.
* The system predefines various combinations of generic function signatures with which you can
* declare a delegate type from, filling in the type names for return value and parameters with
* whichever types you need.
* Both single-cast and multi-cast delegates are supported, as well as "dynamic" delegates which
* can be safely serialized to disk. Additionally, delegates may define "payload" data which
* will stored and passed directly to bound functions.