[Meta] Added FunctionParam, FunctionResult, FunctionArity metafunctions
[Dispatch] Changed dispatchers to use function signature

* SingleDispatcher<B, R> becomes SingleDispatcher<R(B)>
* DoubleDispatcher<B, R> becomes DoubleDispatcher<R(B, B)>
[Dispatch] Allow additional user-data parameter
[Dispatch] Passed key/ID by const-reference instead of value