Make Otherwise a first class predicate

Previously it was injected into default state as the engine, and didn't
really work the same way as other predicates.

This explicitly parses otherwise as it's own predicate, rather than an
implicit named predicate. To add tests around that it required implementing
equality on Otherwise, which required some tests for that too.

I'm not sure this is an ideal fix, i think this allows otherwise to be used
within a set of predicates, eg, as a function arg, or in and AND. It might
be better done as an additional option in the Rules parsing context only