Fake up the first step to DSL-ish mode definition
The mode DSL method makes a Rules object

Maybe need to change it so it's not called mode, or change Rules so it's
not called Rules...
Add DSL methods to Modality::Rules

After driving out behaviour from the Modes test
Extend the DSL all the way through

Now we can define modes and rules
Ensure that the Modes and Rules DSL methods return nil

Also ensure that a block-less call to them doesn't explode
Ensure #mode and #rules normalise their input
Modes#rules return NoRules if no match found
support the reloader API that routes use

We'll need to be safely reloadable or everyone will hate us, so we may
as well use a method cribbed from Routes reloading, which seems close
enough conceptually to be okay.
Wire up config/modes.rb and add :cfp mode

This is all wired up in the same way as Routes get wired up, and it
seems to work. Needs to be tested in development mode, which comes after
pulling all the mode definitions across and using app.modes instead of
Modality in the app itself
Add definitions for the other standard modes
Allow default mode to be set
a typo in an explicit default mode definition raises

Seems like this is an area where you want to fail faster...
set :cfp as the default mode
extract the DSLish Modes stuff to a DSL class

This helps to simplify the previously-dual-purpose default method no end
Modality::Rules stores the mode name

I think Modality::Rules is going to find itself replacing Modality
fairly soon
Bring default / no rules behaviour into line with orignal

We're behaving as much like the old behaviour as possible
(which had the NoRules object, but didn't seem to have any code path
that resulted in it being returned). Now we have an explicit/implicit
default, then it makes sense to have NoRules returned as the last resort
if there are no defined modes
Switch to the mode definitions in config/modes.rb

This commit also removes the now-unused code in `modality.rb` and all of
`modality_test.rb`. I'll move up Modality::Rules to be Modality in the
next commit
Rename Modality::Rules to Modality
Bring the public API of NoRules into line

Basically, add the `#mode` method
Remove cruft from Modality

Remove the ruleset argument which had only been kept around during the
refactoring to avoid breaking the old Modality-using code. Now that's
gone, we can remove this...