code: public <T> FutureValue<T> futureCallUnchecked(JobSetting[] settings, Job<?> jobInstance,
        Object... params) {
      JobRecord childJobRecord = PipelineManager.registerNewJobRecord(
          updateSpec, settings, thisJobRecord, currentRunGUID, jobInstance, params);
      thisJobRecord.appendChildKey(childJobRecord.getKey());
      return new FutureValueImpl<>(childJobRecord.getOutputSlotInflated());
    }
docs: This is the non-type-safe version of the {@code futureCall()} family of
  methods. Normally a user will not need to invoke this method directly.
  Instead, one of the type-safe methods such as
  {@link #futureCall(Job2, Value, Value, JobSetting...)} should be used. The
  only reason a user should invoke this method directly is if
  {@code jobInstance} is a direct subclass of {@code Job} instead of being a
  subclass of one of the {@code Jobn} classes and the {@code run()} method of
  {@code jobInstance} takes more arguments than the greatest {@code n} such
  that the framework offers a {@code Jobn} class.
  
  @param <T> The return type of the child job being specified
  @param settings
  @param jobInstance The user-written job object
  @param params The parameters to be passed to the {@code run} method of the
  job
  @return a {@code FutureValue} representing an empty value slot that will be
  filled by the output of {@code jobInstance} when it finalizes. This
  may be passed in to further invocations of {@code futureCall()} in
  order to specify a data dependency.