Add pattern-matching to `=`.

  * constant = x -- raises ConstantPatternError (ValueError) if x != constant, noop otherwise
  * t x y ... = z -- same as x, y, ... = z if z :: t, raises InstancePatternError otherwise.
  * a:b = c -- assigns c to both a and b, useful for pattern combinations (e.g. `monochromatic_color:(HSV _ 1.0 _) = ...`)

These patterns can be used in function definitions:

    f = (Something a 3) -> a
    f $ Something 1 3  #=> 1
    f $ Something 2 4  #=> ConstantPatternError
    f $ SomethingElse "1"  #=> InstancePatternError

Note: there's no way to iterate through functions until one of them matches yet. TODO:

    f = dispatch
      Something a 3  -> a
      Something _ b  -> b
      something_else -> -1
    f $ Something 1 3  #=> 1
    f $ Something 2 4  #=> 4
    f $ SomethingElse "1"  #=> -1