don't generate question IDs that already exist

Avoid potential duplicate question IDs.  You would have gotten a warning
about this in the past, but the global duplicate question ID limitation
no longer exists.  For ease of use, question IDs should still be
generated uniquely instead of uniquely per parent.
fix broken copying
remove non-functional support for binds with ids instead of nodesets

The case where el.attr('id') is non-null was never doing the correct
special behavior.  bindElement.nodeset never gets used or written, and
even if it did, there is no support for special control nodes that
reference binds by their ID instead of nodeset.
fixes #101: consolidate bindElement.nodeID and dataElement.nodeID into one property
remove unused property and function
remove meaningless bind appearance attribute
remove unnecessary MugElement indirection

The whole dataElement, bindElement, and controlElement separation was a
source of unnecessary complexity in the spec system, widgets, and
elsewhere.

It led to lots of boilerplate like this:

  if (mug.dataElement) {
      // do stuff with mug.dataElement.someProperty
  }

Or

  if (!mug.dataElement) {
      // expects a control-only node.  Not very explicit.
  }

Now, there is only one property container, accessed like:

  mug.p.someProperty

And all accessing and setting of properties on it triggers model change
handlers.  This change basically isolates that code in one function.

Additionally, this enabled some changes to the mug type and spec
definition system that make it yet more declarative.

Fixes:

 fixes #100: shore up model change encapsulation

Also fixed at some point:

 fixes #113: copying choices doesn't generate a unique ID after the first copy
 fixes #15: Ability to change question type to/from label
add back handleMugRename() method in plugin interface
remove unused attribute
switch back to test page loading global dependencies without RequireJS
fix jquery-ui icon reference in test lib
fix toggling of constraint message
remove unneeded code
fix issues with errors

At some point recently, the support for showing icons in the tree next
to questions with errors may have broke.

This fixes that, but instead of the old.

In addition, it fixes pre-existing issues with that, including:

- If a question had multiple errors over time, multiple icons would get
  added.
- If a question was a container, the icon would display below all of its
  children instead of next to itself.

Other fixes:

    fixes #20: error message lingers even after deleting erroneous question

    (same fix, the warning when you edit XML for an invalid form did not
    account for invalid logic references.  More generally, errors is now
    part of the plugin interface.)