Issue #11. Building the bridge.
Issue #11. Large refactoring, using the bridge pattern to separate code
generation abstraction and implementor.