Towards lazy instruction lists: implement a comparison key generator for instructions
This adds a class for building a key for equality comparison purposes. In addition, this class stringifies pymbolic expressions to reduce the overhead of pymbolic expression comparison. This class can also be used for generating persistent hash keys.
This change also converts instructions to use this class for persistent hashing.
Related: #67 (closed).