specialise LuaObject<SystemPath>::PushToLua to cache SystemPath objects

This is done to ensure that two equivalent SystemPath objects will in fact
refer to the same Lua userdata instance. That allows SystemPaths to be
used as keys in Lua tables, which is very useful.
now that Lua SystemPath instances are all interned, they don't need __eq

The default userdata equality should now work correctly, because two
SystemPath values will be the same instance iff they have the same data.
make SystemPath 'final' to prevent accidents
extract the Lua SystemPath blob code to keep it with the rest of SystemPath

This should make it easier to maintain because it puts the memcpy code
that requires detailed knowledge of the content of a SystemPath together
with the rest of the SystemPath implementation.
(One of the most basic tenets of writing maintainable code, so really I
should have done it this way *first*)
Merge remote-tracking branch 'johnbartholomew/deduplicate-lua-systempath'