code: function(remoteWindow, remoteOrigin) {
      this.remoteWindow = remoteWindow;
      this.remoteOrigin = remoteOrigin;
      this.timeout = 3000;
  
      this.handshaken = false;
      this.handshake = pinkySwearPromise();
      this._id = 0;
      this._queue = [];
      this._sent = {};
  
      var _this = this;
      window.addEventListener('message', function(messageEvent) { _this._receiveMessage(messageEvent) }, false);
      this._sendHandshake();
  
      return this;
  }
docs: region Public Methods 
  Talker
  Used to open a communication line between this window and a remote window via postMessage.
  @param remoteWindow - The remote `window` object to post/receive messages to/from.
  @property {Window} remoteWindow - The remote window object this Talker is communicating with
  @property {string} remoteOrigin - The protocol, host, and port you expect the remote to be
  @property {number} timeout - The number of milliseconds to wait before assuming no response will be received.
  @property {boolean} handshaken - Whether we've received a handshake from the remote window
  @property {function(Talker.Message)} onMessage - Will be called with every non-handshake, non-response message from the remote window
  @property {Promise} handshake - Will be resolved when a handshake is newly established with the remote window.
  @returns {Talker}
  @constructor