Set version back to 1.0-SNAPSHOT
Renamed confusing BaseType.values() -> .except()
Removed vestigial TODO comment
CandidateSession.exitUrl now arbitrary length

This had been limited to 128 characters previously, which was causing
problems for Kingston. Now set to arbitrary length.
Improvement to arg checking in bindResponses()

Moved all argument checking to the start of the method to ensure
they don't happen after state changes.
Improved LTI bad result log messages
Enhanced LIS outcomes settings validation

Added check to ensure that the supplied maximum is really larger
than the supplied minimum value.
Fixed trivial typo in comments
Part fix for issue #30: 1-N for QueuedLtiOutcome

I've added functionality for a CandidateSession having many
QueuedLtiOutcomes, and the CandidateItemSessionController now correctly
updated the closed flag for CandidateSessions after every action,
possibly registering a new QueuedLtiOutcome every time the session
closes.

I next need to update the LTI result returning to ensure that results
always go back in the correct order, which would normally be the case
but might go out of order if there is a transient failure somewhere.
LIS results nullified on session close

This is to handle the case where a session may be close multiple times,
which can happen when delivering items. This ensures the recorded LIS
data is always in sync if the pre-conditions for sending LIS results
back fail.
Change to LTI result return logic

This is in light of recent changes that allow multiple LTI
results to be returned for a single CandidateSession. We now
check each batch for multiple results in discard all but the last
one. Provided the result returning is always called serially (which it
currently is due to the way it is invoked via ScheduledService), then
this will ensure that the final result always gets back, or at least
tries more than any other result to get back.
This class is no longer required.

We removed the email sending logic earlier as it's not currently
required.
Tidied up last few commits
Merge remote-tracking branch 'origin/master'
Minor doc tidy to load-modify-save code example
Added some 'final' mods to AbsExpression

I still don't totally like the API in here for validation, but
am not going to change it at present.
Added dynamic assessmentItem building example
Fixed issue #33 re: identifier in ItemResult

The identifier attribute of an ItemResult is now being correctly
computed in the context of a test.

Thanks to Aaron Holland for pointing this out.
Fixed issue #35: numeric OV initial values

The info model said that *numeric* OVs should be set to 0 if no default
is provided. I had been setting these to NULL. This commit fixes this.

Note that this fix applies to OVs in both items and tests, though the
info model not completely clear on this as it's presented in the context
of item variables and item sessions at this point. I think test ought
to behave in this way too.
Change to expr signature valn - Fixes issue #31

The methods in AbstractExpression for checking the output signatures
of child Expressions against what was required has historically been
associating any errors to the *child* expression, rather than the
*parent*. (I hadn't realised this while inspecting the original code.)
As a result, my earlier changes to allow invalid assessments were not
realising that an expression wasn't valid until too late, which was
triggering the error noted in issue #31.

I have now moved the signature validation up one level, which fixes
this issue. The resulting code is a big uglier than I'd like, as the
validation logic also needs to apply to outer ExpressionParent classes,
which don't extend AbstractExpression and usually extend another
intermediate subclass, preventing me adding an AbsExpParent partial
impleemntation. So there's a slightly smelly static method added to
AbstractExpression to do the deed. Yuck!