Made a reasonably large change in which state hashing is now performed
by a stateHashTuple factory that is passed to the learning/planning
algorithm, rather than have it assume the previous attribute-wise state
hashing. This condenses the code a bit and also allows for flexibility
for different means of hashing states in the future, which might be
valuable if there is a mixture of different kinds of attributes.