Separates Cypher intro multiple modules

This PR moves the grunt of Cyphers code into two different compilers modules, and introduces a cypher-commons module where the shared code lives.

It allows older versions to co-exist in a way not possible earlier