Extract the RuleBuilder DSL from the base Variable and VariableProperty classes.

Separate the fluent DSL concerns from the base library. This improves the extensibility of the library, and makes a cleaner distinction between the DSL for building rules, and the rules themselves.

This *is* a backwards compatibility break, but only for people instantiating Variables explicitly, then using the RuleBuilder fluent DSL on them. It's fully backwards compatible as long as you're not mixing the explicit and fluent APIs.