Give value semantics to SymbolLookupContext

Override hashCode() and equals() on the SymbolLookupContext class to
give it value semantics.
Move SymbolLookup reference from EvaluationContext to expressions

Remove the reference to a SymbolLookup from the EvaluationContext class.

Add a reference to a SymbolLookup in the IdentifierExpression,
IndexerExpression and PeriodExpression classes. In
IdentifierExpression.evaluate(), use the SymbolLookup stored in the
expression rather than the one formerly provided by the
EvaluationContext.
Add tests for IdentifierExpression.evaluate()
Format Architecture.java
Generalize ValueVisitorAdapter