Descoping a need is a special case of marking it invalid

This commit updates Maslow to expect (and send) the "not valid" status
instead of "out of scope" from the Need API, since marking a need out
of scope is just one of several reasons to mark a need as invalid.

Only the internals are changed here; the frontend and URLs will be updated
in subsequent commits.
Display reasons when need is invalid
Generalise UI language from out of scope => invalid
Move "record validity decision" button to workflow bar

The 'actions' pattern isn't great and the workflow bar is more common
in the other publishing tools.
Extract common fields between JS and non-JS form

(for validity decision). Since the body of the forms is the same,
this reduces duplication.
Introduce the other_reasons_why_invalid field

This replaces the 'out of scope reason' field.
Change out-of-scope routes to status
Don't display flash message when need status changed

The need status is prominently displayed in the UI now, so the flash
is superfluous.
Rename all the things (out of scope => record validity)
Fix unit test to use a real attribute
Allow multiple status changes

Before this change, it wasn't possible to change a need's status more than once.
Since it'll be possible to repeatedly update the status, this restriction is removed.
Generalise "out of scope" to "not valid" in errors
Add common reasons for needs being invalid.

This is based on the reasons that cropped up most often in the Needs
Board reviews of transition needs.
Enable setting a need back to proposed status
Improvements to decision form JS

- turn code into a govuk_admin_template module
- add Jasmine specs
- simplify the code to not require the '.conditional' class
Hide button to change state when the need is closed

There isn't a compelling reason to have the button there and greyed out.
Improve visual styling on buttons around need validation
Make 'need decision' form language consistent

... with the need status callouts.
Rename "record validity decision" => decide on need
Refactor DecideOnNeed JS module for better readability