Add a failing acceptance test

To capture the parse error i'm debugging, fixing coming in the
next commit, or rebased into this.
Fix otherwise predicate

Changes to parsing in[1] broke the otherwise predicate, which is not followed
by a trailing '?', and wasn't being parsed anymore.

This adds an additional parsing rule that aliases otherwise as a named predicate
to simulate the previous behaviour.

[1] https://github.com/alphagov/smartdown/commit/61b1bb2b848dbddc2dda859dda27e3030b1bbe
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
Merge pull request #56 from alphagov/fix-named-predicate-parsing

Fix named predicate/otherwise parsing errors

As a result of 61b1bb2 the parsing of otherwise as a NamedPredicate failed. The behaviour of otherwise relied on a the weird side effect of it being treated as a predicate, instead make otherwise an explicit language construct/operator.

Adds a high level acceptance test/fixture to catch regression and similar high-level parsing errors that weren't covered by tests.
Version 0.4.0 release & notes
Merge pull request #57 from alphagov/version-0.4.0

[Merge after #56] Version 0.4.0
Answers are now typed objects

Question models know answer type
Raw answers parsed into Smartdown::Model::Answers
as they are processed by Engine.
Model::Answer objects correctly handle comparing against strings

Predicates generally compare answers against strings, so we want
the comparison methods of Answers to parse the compared value before
evaluating the comparison.
SetMembership predicate evaluates using :== on state member

instead of using :== on the value string. This means we can correctly
compare strings with answer objects.