helpsort-773174: Sort the commands properly

The sort function needs a function to know how to compare two commands,
this was missing.
case-773254: Cache lower case versions

match is the input that we're trying to match, in lower case, and we
add a _gcliLowerName property to each option as a lower case version of
the name.

The options are provided by the commands or by gcli itself, so i think
it's safe to add a _gcliLowerName property without causing damage.
case-773254: Use match and _gcliLowerName in comparisons
case 773254: Add unit tests

This checks that AA has a completion proposal to aaa, and that the
text 'AA' gets to the assignment, but only as incomplete text, not as
a completed value.
case-773254: 2 Tidyups

1. Minor documentation clarification
2. Only calculate value when we actually use it
Merge branch 'master' into case-773254

Conflicts:
	lib/gclitest/testIncomplete.js
Merge branch 'master' into helpsort-773174
hidden-773347: Fix option.hidden handling

option.hidden handling was done by CommandType (brokenly), but it really
needs to be done for all selection types.
We shouldn't be excluding exact matches when they're hidden, just not
providing help to get there.
hidden-773347: Allow hidden parameters

Bonus DVD extra.
paramSpec is what the user passes to 'addCommand' in the param section.
By reflecting the 'hidden' attribute in the Parameter class then we get
the (nearly) free bonus feature of hidden parameters.
hidden-773347: Unit tests
Merge branch 'helpsort-773174'
Merge branch 'case-773254'
Merge branch 'hidden-773347' into landing

Conflicts:
	lib/gcli/types/selection.js
hidden-773347: mirror hidden properly

Using "== null" meant that undefined values came across as 'true' which is
wrong because undefined should mean false (failing to specify hidden:true
means that you're not hiding) So we just pass the hidden property through
without changes.
options-775031: Expose Command.hasNamedParameters

A command has named parameters if any of its parameters is not positional.
Example of using positional parameters (with mythical copy command):
>> copy a.txt b.txt
Example of using named parameters:
>> copy --source a.txt --dest b.txt
There are benefits of both systems.
options-775031: Add '[options]' to hints

We add '[options]' when there is at least one remaining named parameter,
which is not hidden and which doesn't already have a value associated with
it (i.e. the argument type is not 'BlankArgument').
Also we need to add an nbsp before the '[options]' if there isn't already
a space at the end of the command line.
Also update the many tests affected by this change, and add some new ones.
hidden-773347: Remove duplicate test
Merge branch 'hidden-773347' into options-775031

Conflicts:
	lib/gclitest/testIncomplete.js
boolgroup-773565: Named param proposals need spaces

Previously when there were predictions in the arguments to named parameters
we were presenting them without a space. For example if | represents the
cursor we would do this:
>> copy --source|readme.txt
Rather than:
>> copy --source| readme.txt
(The readme.txt is a different color to indicate it's a completion)

The fix involves checking for a NamedArgument without a space at the end of
the prefix and then adding a space to the beginning of the proposal.

We also remove the [options] marker whenever we have a tab proposal, which
is clearer in general, and rename optionsRemaining to addOptionsMarker
since the calculation now involves more than just 'are there options
remaining'.
boolgroup-773565: Rationalize tslong mock command

'tslong' was originally taken straight from the 'jsb' command which
demonstrated a number of issues with GCLI. The parameters were thus rather
arbitrary since they reflected a real world command rather than something
that we were trying to test for.