Add failing spec for addBeforePathChangeListener

The changeHander method isn't being called when expected;
it's being called after the change has been applied.
Fix addBeforePathChangeListener, call before

When the path was changed through a binding, preserve the before
semantics of the scope.

This was provided by Kris, but does cause a failure in one of the
existing specs
RadioButtonController jsdoc.
RangeController jsdoc.
Add failing specs for RangeController

for calls to range change listeners when using multiSelect = false,
and using the selection of one RangeController as the content of
another.
Fix Text public API jsdocs
Fix Repetition public API jsdocs
Fix Condition public API jsdocs
Fix Substitution public API jsdocs
Add UnitDeserializer @lends
Partial fix Component public API jsdocs

Properties reviewed: willDraw, draw, didDraw, needsDraw and element.
Merge pull request #1343 from asolove/controller-docs
Initial approach to fixing rangeController selection.

- Selection is always an array and is not settable. Uses Stuk's splice duck-punch to maintain invariants.
- Does not yet guarantee uniqueness, but can be made to do so.
- RangeController tests pass, with the ones that directly set the selection removed.
- Other tests, including AbstractSelect, fail. Will require code changes there now that selection is non-settable.
Amendments to first pass JSDocs
Fix AbstractSelect to work with new RangeController.

- Depends on frb#31 and frb#32.
- Adds some new tests and makes existing ones pass under the new restriction that RangeController#selection must be modified in-place.
Remove debug code.
Add tests for negative inputs to RangeController selection splice
RangeController#selection: Add documentation for RangeSelection and protect its custom splice method from enumerating or being changed.
Merge branch 'range-controller-fix' of https://github.com/Stuk/montage into range-controller-fix
Fix RangeController's RangeSelection#splice to work with negative offsets.