Make the widget property of Widgets a plain element
Clean up Viewer plugin and fix test suites

This commit cleans up the new Viewer plugin, and adds a much more
sensible set of tests for Viewer functionality.

Things changed:

- the readOnly option has been removed in favour of distinct
  showEditButton and showDeleteButton options
- the viewerHideTimeout functionality has been improved by
  distinguishing between hiding due to a passive user action (mousing
  off the viewer) and an active one (mousing over another highlight) and
  using different timeouts for each case
- The tests no longer reach deep into the internals of the plugin
  implementation...
Clean up Editor plugin and fix test suites

This commit cleans up the Editor plugin and adds some more sensible test
suites, much like the preceding commits for Adder, Viewer, Highlights.

Things of note here:

- Reenable the draggables (even though they are still broken, see #341)
- Add an `isShown()` method to the editor, for parity with the Adder and
  Viewer plugins
- Standardise on using the keypress event's `which` property, as this is
  the only one that jQuery promises to normalise
Fix broken Annotator#destroy() introduced by 1336fbb

Annotator.plugins is currently an object, not an array
Fix tests that don't clean up after themselves

- also, standardise plugin test suite names (from "Annotator.Plugin.Foo"
  to "Foo plugin")
- remove a couple of implementation tests from annotator_spec
Add back accessors for Editor and Viewer on core

This commit causes the Editor and Viewer plugins to create "editor" and
"viewer" properties on the core Annotator instance, in order to remain
compatible with plugins like Tags and Permissions that use these
properties to set up fields on the viewer and editor.

At the moment the deprecation warning suggests the developer switch to
using a method that currently *also* issues a deprecation warning, so
we're going to need to sort this out at some point...
Correct test logic for rejected promises

For an ES6-compatible promise, p.catch(rejectionCallback) returns a new
promise which resolves to the *return value of rejectionCallback*, i.e.
it *will* be resolved.

Fix this so that the tests in question do in fact throw when promises
are mistakenly resolved, but not all the time :)
Rewrite remaining setupAnnotation tests for Adder and Highlights

This commit also adds two new public methods to the Adder plugin, to
make it more useful to people not using it in the default configuration.
Specifically, the event handlers are now thin(ner) wrappers around
Adder.captureDocumentSelection() and Adder.create().
Shut up false-positive lint warnings
Restore tests for non-blocking highlight drawing