function arange (start, stop, step, dtype) {
  if (arguments.length === 1) {
    return arange(0, start, 1, undefined);
  } else if (arguments.length === 2 && _.isNumber(stop)) {
    return arange(start, stop, 1, undefined);
  } else if (arguments.length === 2) {
    return arange(0, start, 1, stop);
  } else if (arguments.length === 3 && !_.isNumber(step)) {
    return arange(start, stop, 1, step);
  }
  var result = [];
  var i = 0;
  while (start < stop) {
    result[i++] = start;
    start += step;
  }
  return NdArray.new(result, dtype);
}
Return evenly spaced values within a given interval.

@param {int} [start=0] - Start of interval. The interval includes this value.
@param {int} stop - End of interval. The interval does not include this value.
@param {int} [step=1] - Spacing between values. The default step size is 1. If step is specified, start must also be given.
@param {(String|Object)} [dtype=Array] The type of the output array.

@return {NdArray} Array of evenly spaced values.