Use the 'final' keyword in IMPLEMENT_TYPEID

The 'final' keyword makes sure that the virtual method is not overriden in
subclasses, as a check for us, since we only want to implement get_type_code()
in the lowest-level subclasses. Otherwise a compiler error will occur.

There might also be speed benefits to this.