def csv_read(path)
      lines = begin
        if path =~ /\.gz$/
          Zlib::GzipReader.open(path) do |f|
            CSV.new(f).read
          end
        else
          CSV.read(path)
        end
      end
      keys = lines.shift.map(&:to_sym)
      klass = Struct.new(*keys)
      lines.map { |i| klass.new(*i) }
    end
def csv_read(path)
      lines = begin
        if path =~ /\.gz$/
          Zlib::GzipReader.open(path) do |f|
            CSV.new(f).read
          end
        else
          CSV.read(path)
        end
      end
      keys = lines.shift.map(&:to_sym)
      klass = Struct.new(*keys)
      lines.map { |i| klass.new(*i) }
    end
Read a csv from +path+. Returns an array of Structs, using the keys from
 the csv header row.