WIP for review

This has a bunch of ideas I'll document inline
To be honest, I really don't like the chaining here. It's unclear what's happening (looking at it, it looks like it's telling `containsDigit` that *that rule* needs to also contain a symbol). This is more personal preference here I guess... http://ocramius.github.io/blog/fluent-interfaces-are-evil/