Support declaring intervals as well as classes for the optimizing compiler
A `{ class } declare` call will now also refine the value info if the `class`
word has a valid interval in the "declared-interval" property.
This allows certain optimizations during value propagation passes in the
frontend compiler.
For easier usage, a new vocabulary `math.intervals.predicates` is supplied.
Union and intersection classes are also considered when determining the interval.
The compiler makes use of this in `compile.tree.propagation.info` in
`class-interval`.
This also ensures that whenever the frontend determines that a value has a class
with interval declaration, the interval slot of the value-info is initialized
correctly.