code: public FutureData<T> onData(FutureResponse<T> response) {
          this.listeners.add(response);
          //if we already received a response then notify straight away
          if (this.data != null) {
              response.apply(this.data);
              doNotify();
          }
          return this;
      }
docs: /*
  Adds an event listener that is notified when data is received
  
  @param response the future which should listen for a response
  @return this to enable chaining