[Scenario] Avoid infinite loops when constraining Activities

It is possible to construct activity/decision object graphs
for which constraint rules are unsatisfiable, by, for instance,
creating cycles, or making one activity the subactivity of
others. This occurs in nasa/MCT-Plugins#31.

Here, we bail out early of activity constraints early when
these situations are detected:

* In constrainToDuration(), used to push or shrink children to
  fit inside their parents, a set of component ids for
  actively-constrained components is maintained. This is used
  to detect cyclical constrainToDuration calls and exit early.

* In constrainDecisions(...), there is a loop used to push or
  pull other components until there is nothing left to move.
  Since it is possible to construct an object graph with
  contradictory push/pull necessities for decisions, this
  loop could potentially execute indefinitely. To avoid this,
  a timer (100 ms - reasonable upper bound for acceptable
  latency) is used; if the constraint situation is taking
  unacceptably long to resolve, exit early.
[Scenario] Recreate timeline when top-level activities overlap

When moving activities within a timeline view using mouse drag
controls, the user can cause two activities to overlap. This is
permissable, because top-level activities of a timeline are
allowed occur concurrently; however, this looks strange as the
visual components occupy the same space on screen.

The timeline view previously addressed this possibility only
on view instantiation: Extra 'blocks' were created such that
concurrent activities could be placed on lower rows. With
this change, this behavior may now occur whenever a change to
an activity is made, by recreating the majority of the view
(as would happen during instantiation.) For performance and
useability reasons, this may only occur when a drag gesture
has completed (meaning that activities may still overlap
while a drag is ongoing). Additionally, a check is performed
to detect overlapping activities, to avoid re-creating the
view if it is not necessary.

This addresses nasa/MCT-Plugins#27
Merge pull request #51 from VWoeltjen/master

[Scenario] Remaining bug fixes for followup #1
[Scenario] Merge in containment policy
[Scenario] Track revision when building distribution
Merge pull request #52 from VWoeltjen/revision

[Scenario] Track revision when building distribution
[Scenario] Validate input for Activity Wizard

Listen for changes to input fields when creating a new
Activity and disable the Create button when invalid data
(text that cannot be parsed as a time) has been entered.
Addresses nasa/MCT-Plugins#45
[Scenario] Validate input for Decision Wizard
[Scenario] Fix comparator in TimelineView

Previously introduced sorting of nested Activities
in TimelineView to detect situations where they
overlapped. Comparator used for this sort included
a possible divide-by-zero; replaced by Math.signum
here.
Merge pull request #53 from VWoeltjen/comparator

[Scenario] Fix comparator in TimelineView
[Scenario] Read commit info from filter.properties

Continuous build server does not like having git rev-parse
invocation in the command line arguments of the build, so
commit hash is written to and read from a temporary file,
filter.properties, instead.
[Scenario] Add duration constraint system

Introduce DurationConstraintSystem, responsible for tracking
changes to objects with DurationCapabilities and enforcing
constraint rules. Allows this behavior to be separated from
the user object hierarchy and applied only to appropriate
sub-trees (i.e., activities visible in a timeline view.)
[Scenario] Hook up duration constraint system

Build a duration constraint system and hook it up
to drag controls. Also fixes some bugs in the logic
of DurationConstraintSystem itself.
[Scenario] Prune obsolete activity constraint code
[Scenario] Enforce sensible activity bounds

Do not permit activities to have negative start times,
or negative durations (end before start)
[Icons] Added scenario plugin icons
[Scenario] Enforce constraints when Timeline View created

Enforce the full constraint system for a Timeline View
as soon as the Timeline View is created. This prevents
the user from visualization any nonsensical or
contradictory activity timeline, even if it is
permissible to construct such a timeline by way of
using other composition tools (Info View, create
wizard, drag-drop to add multiple parents...)

This is primarily intended as a quick-fix to
nasa/MCT-Plugins#59 although it also reduces the
practical severity of nasa/MCT-Plugins#42
[Scenario] Merge containment fixes
[Scenario] Save constraint changes

Track components actually touched by constraints,
and invoke save on any which are changed when a
Timeline View is loaded. This ensures that Save and
Save All are available as soon as the view is
loaded, so that those automated changes aren't
lost.
[Scenario] Enforce constraints in scenario view

This begins to adapt the constraint-enforcement
automation employed by TimelineView such that it
is also obeyed (and does not disrupt) the Scenario
View.