1 millon * improvement to isomorphism

Much better isomorphism implementation with lazy data structures and better algorithm, leading to [1 million factor improvement in even very simple cases](https://github.com/read-write-web/banana-rdf/blob/0436a63eecb00b73c3564e5ee23e9fd0286276c5/rdf-test-suite/src/main/scala/iso/GraphIsomorphismTest.scala#L305). If complexity of calculation is too big - meaning of "too big" is user settable - the calculation can fail quickly and gracefully.
Is that as efficient? Or does it lead to two unapply calls?