add Switchboard module to handle share actions

This allows us to bypass popup restrictions when we attempt to open
dialogs during the Drop action
Revert "add Switchboard module to handle share actions"

This reverts commit 94d958a8f06f7dffe2d91a167e4c0149c6b45407.

The switchboard was an attempt to bypass browsers' popup restrictions.
However, this is ultimately going to fail.

By creating the switchboard, we create the popup on user action (which
the browsers will always allow). And then once the user decides *how*
they want to share, we'd redirect the window to take the appropriate
action.

The problem is that as part of the 'drop' action, the main window takes
focus. And as a continued part of preventing against popups, browsers
restrict our ability to target a particular window to give it focus.

This means that although we would always create the right action, the
user would never see the window below the taskbar. This is a bad user
experience.

Our alternatives:
- iframe the content into the page
** Not actually an option. Most services restrict iframes.
- Tell the user to find the hidden window
** Also not really an option
- Stick with the popups, but ask the user to enable popups
** Not an option. They'd have to enable popups for every page visited.
- Change the UX to require a click when the final share action happens
** This is what we'll do
remove Tinybox module

This reverts commit 7c904781c18ccdb34c9355fb57b0263a24941244.

The module isn't needed for now (since we can't iframe most sharing
services), and we can always add it back as needed.
Add lastSubmission module; Holds last submissions
lastSubmission can alert clients when updated
refactor LinkViewer to use LastSubmission
create Nexus dropzone; initiates sharing actions

The Nexus dropzone is the target of the 'drop' action. The intention is
that after drop, it will open a new div, allowing the user the option to
choose where to share.
expose hook to subscribe to NewSubmission
add State Machine library
use state machine to control LastSubmission

Full state transitions not yet handled. Need to account for:
- how the Success state machine moves between submitted and success
states after initial success
- how to order submissions if multiple are placed before the first
returns
fix state transition for lastSuccessful

allow the state machine to show each subsequent submission, but always
fall back to 'success' afterwards
fix state transition for lastSubmission

LastSubmission state machine updated to handle multiple asynchronous
events.

The submit() event always interrupts what we're doing to store our
latest submission. All future processing is skipped if the response
doesn't match this submission. So if we are in a terminal state (fail or
success) and a new response comes in (before we ever kicked back to the
submit state), then we can assume the response is out of order from a
prior submission.
link 'success' state machine to 'all' events

The LastSubmission state machine globally handles the state of the most
recent submission. Instead of replicating the same events for the
LastSuccessful state machine, we can fire its events as a result of the
parent's events.
create suite of state machine subscription events

Clients can subscribe to Submit, Fail, and Complete events for all
submissions or just the last successful submission.

Additionally, rename 'error' event to 'fail'. StateMachine.error() is
already a defined property.
update existence check to exclude Failed state
show loading element on submission