Simplify Fluent DSL

- Use abstract base class, instead of an interface to provide a more
succinct fluent rule definition DSL
- Rearrange namespaces