Rewriting symbols system to intern symbols

Changes:
- Context now supports mapping between symbol names (strings) and interned symbols
- Parser now builds and uses interned symbols when parsing user or file input
- Interpreter code changed to use interned symbols internally
- Rewrote description system to work with new interned symbols system
- Interpreter-relevant description code now lives in its own file

Note: these changes should result in a non-trivial speedup and reduction of memory usage for certain use cases.