Strings Interner

Because strings are immutable (i.e. the use the type ImmutableString instead of normal Rust String), each operation on a string actually creates a new ImmutableString instance.

A strings interner can substantially reduce memory usage by reusing the same ImmutableString instance for the same string content.

An Engine contains a strings interner which is enabled by default (disabled when using a raw Engine).

The maximum number of strings to be interned can be set via Engine::set_max_strings_interned (set to zero to disable the strings interner).