1. Fixed many problems with computing hash codes. The key problem was due to Scala's
   Symbol class returning a different hash code for every Symbol with the same value
   and a different hash code for the same Symbol across different JVM runs. The
   hash code for a Symbol in SymbolLiteral is now computed from the string representation
   of the Symbol.
2. Given the surprising behavior of Symbol::hashCode, equality checking for Symbols is now
   done by comparting the string version of the 2 Symbols in Literal::equals().
3. Took out the caching of Apply()s in the Apply constructor since the FastLinkedList class
   has some hard to fix issues.
4. Operator applys to be returned with Apply::getOperators() now have to be pre-registered
   with BasicAtom.trackOperator().