Create Peers collection and encapsulate options

Re-factor Peer object to use hard-coded connection options be default,
but allow these options to be overridden at instantiation or invocation.
Introduce targeted calling

This is a "first pass" implementation and needs heavy refactoring.
Implement Peer#getTransport
Encapsulate ICE candidate sharing

By making Peers aware of the Transport, the details surrounding ICE
candidates no longer need to be managed in the application logic.
Extend getMedia to return a promise
Remove unneeded dependency
Ensure media streams are ready before connecting
Re-factor

Remove unused code and simplify deferred handling.
Remove assumption around a single active peer

Although the prototype does not currently support more than one
simultaneous peer connection, this structure should aid in future
refactoring.