Add ResultsRange field to AnalysisRequest

The field setter accepts specs for a set of analyses.  It creates
the ResultsRange value from different places, in the following order:

    1 - Client specs with spec.SampleType match
    2 - Lab specs with spec.SampleType match
    3 - Take override values from AR.Specification field
    4 - Take override values from form or jsonapi

The field value is stored as a list of dictionaries.
aranalysesfield sets spec to AR.

The code to set analysis.specification is removed.
Modify AR Add submit handler to provide keyword

keyword is used to set the AR spec, where before, these values were
just written to the analysis, and this info was not required.
analyses listings retrieve specs from AR, not analysees
AnalysisSpec.SampleType instead of title matching

There was some silly code that matched sampletype-title with spec-title
to set defaults, which is removed.
add dicts_to_dict to utils

makes it easier to work with lists of dicts
ResultOutOfRange check for normal analyses uses AR value
Remove unused code
LIMS-1425 Verify Workflow (bika_listing) recursion
Merge branch 'hotfix/next' into next-arspecs
jsonapi/analysisspec: add uid to ResultsRange values
Fix PT and JS for proper ResultsRange storage.
Fix copy_to_new with AR specs

AR specs override Specification entry in AR add form, if copying an AR.
Remove errant analysis.specification reference
ARAnalysesField: override individual specs instead of entire ResultsRange

This field's setter must handle ar_add and manage_analyses, meaning
that the list of specs passed in is not necessarily the entire list.

The function now overrides existing AR specs, instead of setting them
to the form values.
ar analyses field - oops this was using specs from form, but ignoring ResultsRange for existing ARs.
manage_analyses part 1: initial form display at least has correct values.  Value inserted into TAL with entire AR spec.
copy to new: code was getting in the way of normal AR add.
Incomplete specs caused index error
Mistake: results range was converted to dict.