Compiler Exension

added a compiler extension that allows easy creation of user-defined compilers,
which register themselves with custom ClauseElement? subclasses such that the compiler
is invoked along with the primary compiler. The compilers can also be registered
on a per-dialect basis.

This provides a supported path for SQLAlchemy extensions such as ALTER TABLE
extensions and other SQL constructs.