Zef interpreter after Optimization #4: Symbols
This version of the interpreter avoids using std::string for symbol lookup. Instead, a hash-consed Symbol object is used instead.
This makes all of the hot path hashtable lookups use a Symbol* as the key, which is faster.
This is displaying a diff from the previous version of the Zef interpreter.