#28709: Improve/introduce Customizer JS models for Controls, Sections, and Panels

https://core.trac.wordpress.org/ticket/28709

 - [x] Re-sort controls, sections, panels when their priorities change
 - [x] Toggle visibility of section when all controls are removed or become in`active`
 - [x] Make sure that controls can be moved between sections purely by changing their `section` property.
 - [x] Introduce a `$type` for Customizer sections and panels, and let there be associated constructor overrides in JS.
 - [x] Incorporate all accordion logic into the Customizer `Section` and `Panel` models.
 - [x] Hide/collapse section/panel when all children are removed.
 - [x] This should result in the colors section and wigets panel being hidden, but it's not sticking right now: `wp.customize.section( 'colors' ).active( false )` and `wp.customize.panel( 'widgets' ).active( false )`
 - [x] When reordering widgets in a sidebar, update the `priority` state in conjunction with the movement of the DOM element, or the DOM change will be lost. 
 - [x] Introduce `active_callback` to Panels and Sections.
 - [x] Use Section `active` state instead of using sidebar_widgets control `active` state change to manipulate UI.
 - [ ] Add unit tests for JS models (initial tests committed).
 - [x] Use `onToggleActive` or `onActiveChange` instead of just `toggleActive`. Same goes for `expanded` state.

# `active`/`expanded` APIs

 - [x] Allow Panels' and Sections'  `expand`/`collapse` and `activate`/`deactivate` methods to take an optional `args` object which gets added to a queue of options processed by the `onActiveChange`/`onExpandedChange` handlers. This allows, for instance, `section.collapse( { duration: 0 } )` and `section.expand( { allowMultiple: true } )` calls to be possible.
 - [x] Depends on previous: Make sure top-level sections are collapsed before opening the panel, see #36.
 - [ ] Depends on previous: Fix mispositioned panel contents when the parent section siblings' active states change, i.e. due to navigating around in the preview when the panel is open. See https://github.com/xwpco/wordpress-develop/pull/36#issuecomment-60266555.
 - [x] Depends on previous: Make sure that accordion changes continue to work with Widgets, where dragging allows two sections to be open at the same time (extend API to allow multiple sections to be opened concurrently). For instance, implement `section.expand( { allowMultiple: true } )`.

# Deep linking

 - [ ] Allow sections, controls, panels to be deep-linked. 
 - [ ] Implement `focus()`. Widgets should be updated to use this as well. Focusing on a control should cause a containing section to be expanded, as well as its containing panel. See [#29529](https://core.trac.wordpress.org/ticket/29529).
Regarding scrolling, this is done in #39 by just calling `focus()`.

I don't think though that we should activate a panel/section/control if it is inactive when calling `focus()`.