Bug 816257 - Detraitify panel implementation.

This change lays foundation for followup change that will add compatibility for panels in the private browsing mode.
It also lays foundation for de-tratification work by implementing adapter modules for working with symbiont & worker
traits.

## Overview

- Implement adapter `sdk/worker/utils` module, providing temporary solution
  for detraitification of APIs that depend on worker / symbiont.
- Refactor `Worker` constructor into small methods so that worker can be instantiated
  without window reference it will be attached to.
- Factor out `EventTarget`s initialize into `setListeners` utility function to avoid complexity
  involved with calling super constructor.
- Implement `pipe` utility function for piping events from one event source to other.
- Factor out parts of panel code that deal with DOM into `sdk/panel/utils` module.
- Start emitting observer notifications for panel events (if unclear why see [Bug 843235](https://bugzilla.mozilla.org/show_bug.cgi?id=843235))
- Implement `sdk/util/contract` module to simplify / sugar property validation.