Load this data_table from a stream or file.

    Blank lines in the file are skipped. Any existing values in this dataTable
    object are cleared before loading the new ones.

    :param in_fh:    load from this stream. Can also be a string, in which case
                     we treat it as a filename and attempt to load from that
                     file.
    :param header:   if True, the first row is considered a header
    :param delimit:  delimiter for splitting columns; set to None (default) to
                     split around any whitespace.
    :param verbose:  if True, output progress messages to stderr.

def load(self, in_fh, header=False, delimit=None, verbose=False):
    """
    Load this data_table from a stream or file.

    Blank lines in the file are skipped. Any existing values in this dataTable
    object are cleared before loading the new ones.

    :param in_fh:    load from this stream. Can also be a string, in which case
                     we treat it as a filename and attempt to load from that
                     file.
    :param header:   if True, the first row is considered a header
    :param delimit:  delimiter for splitting columns; set to None (default) to
                     split around any whitespace.
    :param verbose:  if True, output progress messages to stderr.
    """
    self.clear()
    if verbose:
      sys.stderr.write("getting input...\n")

    # figure out whether we need to open a file or not
    in_strm = in_fh
    if isinstance(in_strm, basestring):
      in_strm = open(in_strm)

    for line in in_strm:
      line = line.strip()
      if line == "":
        continue
      if header and self.header is None:
        self.header = line.split(delimit)
        continue
      parts = line.split(delimit)
      if self.frame != [] and len(parts) != len(self.frame):
        raise IOError("Cannot handle ragged data frames")
      while len(self.frame) < len(parts):
        self.frame.append([])
      for i in range(0, len(parts)):
        self.frame[i].append(parts[i])