Implement graph hashing & fast graph isomorphism

- Implement a graph hashing algorithm based on TE Portegys's paper
  "General Graph Identification With Hashing"
- Implement a graph isomorphism test based on graph hashing

---------------------

The custom memoize implementation allows for better performance in some large graph cases which can take advantage of pmap, but as with `clojure.core/memoize` this implementation never clears the cache possibly leading to memory issues for repeated hashing of extrememly large graphs.

The design decision was made to provide a custom hash function rather than add a hashing library. This choice is open to debate.

The use of a dynamic hash-algo var is also open to debate, but will not cause issues with sequence lazyness since all lazy seqs will be fully computed and hashed before the hashing function exists.