optimize: Allow to have global string interning table (-1 pointer in SQString).

If GLOBAL_STRINGTABLE is deffined, string table (used to intern all strings to
assure their unique and allow to compare strings by just comparing their
addresses) will be kept global and used by all SQVMs created. This saves need
to keep SharedState pointer in SQString, with gross savings is more than 0.5K
(32bit) just for a VM startup. Of course, with this change, multiple SQVMs
are definitely not thread-safe.
optimize: Add support for profiling SQTable access performance.
Factor out string allocation to be SQString methods.

Easier to reuse/change.
Allow to disable string interning to ensure their uniqueness at create time.

UNIQUE_STRINGS define. Essentially, this trades off some memory for some
performance. If interning is enabled, we esentially treat each string as
table key - even those strings which never will be, even those which are
long or giantic. Disabling interning also saves a pointer in a string
object header (and sharedstate pointer, unless already disabled by
GLOBAL_STRINGTABLE undefined). On the other hand, even during startup
Squirrel deals with a lot of small strings, so more copies are allocated,
which besides memory usage leads to heap fragmentation. So, this truly
should be configurable setting.
Fix compiler to work with non-unique strings.