Implement the basics of a native function manager

Code within the Las Venturas Playground plugin should be able to
register new native functions exposed to the Pawn scripts, but it
shouldn't have to deal with any of the crap that comes with Pawn's AMX
interfaces.

Because of this, we allow plugin code to provide a native function
through the ServerInterface, which then calls through to the
NativeFunctionManager. Here we validate the entry (names must be unique,
and we mustn't have provided natives to another script in the past) and
then create a trampoline function.

This trampoline functionality is a piece of black magic. In a nutshell,
it takes the std::function provided by the plugin and uses a combination
of C++ templating tools to have the compiler generate a set of
trampoline functions. These will be invoked by the AMX runtime, grants
us the ability to work with the input parameters, and then invoke the
std::function it was associated with.

Right now this is just convenient, but in the near future this will
allow me to wrap common functionality (most notably for getting
parameters in a certain type, e.g. a string) in a utility class in
//server, meaning that no other layer has to know anything about Pawn.

One draw-back from this approach is that it comes with a minor binary
size cost, but since this is a server-sided component that's a secondary
concern.