An immutable data type representing an image expression, as defined
in the PS3 handout.
PS3 instructions: this is a required ADT interface.
You MUST NOT change its name or package or the names or type signatures of existing methods.
You may, however, add additional methods, or strengthen the specs of existing methods.
Declare concrete variants of Expression in their own Java source files.
hash code value consistent with the equals() definition of structural
equality, such that for all e1,e2:Expression,
e1.equals(e2) implies e1.hashCode() == e2.hashCode()