Refactored Expression to support multiple implementations. Closes #30.

No functional changes.
Support just-in-time / on demand expression parsing. Closes #29.

Useful for decreasing the load time and deferring parsing to later in
the application life cycle.