status: Added GetFloatWithDefault.
rules: Heavily refactor rules. One rule type, with conditions and actions.

Instead of having multiple types of rules, have just one. Every rule has
a condition and an action. Actions are triggered when conditions become true.

Conditions announce when they become true or become false via a chan bool.

There are multiple types of conditions (currently daily and periodic, matching
the former specialized rules), with more to come.

This changes the location of rules, and their expected contents.

syntax of rule specification.

status://<adaptor>/rule/<RuleName>/

{
  "condition": {
    test = "daily" or "periodic"
    <condition type specific values, if any>
  },
  "action": <Same old action syntax>
}
conditions: watchCondition added.

The watch condition becomes true when a watched URL is updated. It may only
become true if the watched URL is updated multiple times.

Testing helpers are created and used for all conditions.
conditions: Move shared values/code to base and compose it in.

All conditions now compose from base, and use it for standard helper methods.
conditions: Add concept of a trigger to the watchCondition.

A watchCondition is true if the watched URL is equal to the
trigger. It is true for as long as things match. If the watched URL is
a wildcard, it is true if there is at least one matching URL that
contains the trigger.