Enable lists to use multiple sources via chained mappers

* add GGRC.ListLoaders.CrossListLoader
* remove can.Model.Cacheable.define_association_proxy and friends
* remove notes saying widgets don't contain all mapped objects
* add GGRC.Mappings with extensive, but not complete, mappings
Added "+ Objective" to sections

"+ Objective" will jump directly to create objective, and then after
successful creation, will create a join between the new objective and
the original section.
Improvements on mapping functionality

* reduce number and duplication of events due to mappings
* calculate mappings on demand rather than as observables
Trivial fix to restrict models to their proper list
Merge remote-tracking branch 'origin/develop' into feature/mapping

Conflicts:
	src/ggrc/assets/javascripts/apps/business_objects.js
	src/ggrc/assets/javascripts/controls/control.js
	src/ggrc/assets/javascripts/models/simple_models.js
	src/ggrc/assets/javascripts/sections/section.js
Tweaked "+ Objective" workflow

- Moved "+ Objective" link after "+ Object"
- Moved "map new objective to section" information from the form to the
title of the modal
- Added the section description as the default objective description
A few changes to avoid unnecessary events

* special case for `context`, since it's the only attribute which has
  implied meaning when `null`
* handle `context` in modals controller rather than form markup, which
  avoids repeated set, add, remove events
* add `Cycle` model, temporarily, to suppress events on Program.cycles
* don't add `_wysihtml5_mode` attribute to the instance
Fix some tree view options and bugs
Fixed if_equals not passing the proper context stack
"+ Objective" launched from the multitype selector will now use the section's description as the default
Various fixes

* don't duplicate `find_all` (and hence, `refresh`) in modals_controller
* delay rendering list items for a moment in case the controller is
  immediately replaced
* `child_count` now listens to `list.length`, which makes counts correct
Make RefreshQueue request limiting actually work
Fix case of re-adding the object just removed from the list
Update templates to match new `using` usage
Disconnect CanJS Cacheable models to avoid event madness

* Basically, instead of instances directly containing other instances
  (either directly or in lists), instances now contains stubs, and lists
  of stubs.  This more accurately reflects the data coming down from the
  server, and avoids mass event propagation.  Since we're not actually
  using events emanating from sub-objects and list-objects, this is
  okay.
* Adds Observe.prototype.stub and Observe.List.prototype.stubs to
  generate the stub objects on compatible Observes and Model instances.
* Adds Observe.prototype.reify and Observe.List.prototype.reify to
  return the corresponding instance(s) for given stubs and lists of
  stubs.
* Adds CMS.Models.get_stub and CMS.Models.get_stubs to mimic
  CMS.Models.get_instance and CMS.Models.get_instances, but return
  stubs.
* Note: Attached instances will still be instantiated
  (can.Cacheable.model will still be called), but the source instance
  will only retain the stub.
* Note: This commit loses some of the optimizations we made inside
  can.Model.Cacheable.model -- these can (and should) be reinstated, but
  are less important, since unnecessary events are less catastrophically
  slow.

* Additional fixes:
    - Overrides can.Model.Cacheable.attr to not bork when passed an
      Observe instances.
    - Fixes `using` mustache helper to use `reify` correctly, but this
      required changing the signature/usage to only support keyword
      arguments.
Fix tree-node adding by inserting relative to classes

* In strange cases, options.$footer and options.$header would be present
  in active TreeView instances, but would point at detached elements.
  Thus, using insertBefore, etc, would insert new nodes detached from
  the DOM.
* To fix, add `.tree-footer` classes, and insert relative to
  `this.element.find('.tree-footer')`, which seems to always work.
Update Models to use `stub` and friends instead of `model`

* also removes some `serialize` methods and objects which were
  either problematic (the methods) or unnecessary (the objects) with
  the `stub` paradigm.
Merge remote-tracking branch 'origin/develop' into feature/mapping-with-stubs

Conflicts:
	src/ggrc/assets/javascripts/models/cacheable.js
Merge remote-tracking branch 'origin/develop' into feature/mapping-with-stubs

Conflicts:
	src/ggrc/assets/javascripts/controllers/modals_controller.js
Minor TreeView optimization and UI-locking avoidance