Implement a key builder for structural equality testing.
This adds a class for building a key for equality comparison purposes. In addition, it 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.