Adds fully deduceable templates for compile time checking of native methods

This patch adds advanced templates and a macro that allows
to register native methods simply by wrapping method pointer
with NATIVE_METHOD() macro.

Various type checks are performed at compile time,
so it would be very hard to register method as native
without triggering the compilation error.

Currently native methods may have formal parameters of any
type which are descendants of TObject. Return type may also
be descendant of TObject. So, native methods now really look
like any other method which accepts objects and returns one.

Additionally, TObject::checkClas<>() template method is provided
which checks that actual passed object conforms to a formal
parameter's class at runtime. So for example it would be illegal
to pass a TString to a native method that defined as foo(TSymbol*)

Small integer values are also checked because almost always
they need special handling.

Issue: #37