docs: def _bin_to_extra(extra_bytes):
    """Pre all the reamining bytes of an entry
    Post an array of 
     1. A dict keyed by Tag with {'type':,'value':} where value is a string unless type is i
     2. A string of the remainder
    """
    #global _bam_value_type
    extra = StringIO(extra_bytes)
    tags = {}
    rem = ''
    while extra.tell() < len(extra_bytes):
      tag = extra.read(2)
      val_type = extra.read(1)
      if val_type == 'Z':
        rem += tag+':'
        rem += val_type+':'
        p = re.compile('([!-~])')
        m = p.match(extra.read(1))
        vre = ''
        while m:
          vre += m.group(1)
          c = extra.read(1)
          #print c
          m = p.match(c)
        rem += vre+"\t"
        tags[tag] = TagDatum(val_type, vre)
        #tags[tag] = {'type':val_type,'value':vre}
      elif val_type == 'A':
        rem += tag+':'
        rem += val_type+':'
        vre = extra.read(1)
        rem += vre+"\t"      
        tags[tag] = TagDatum(val_type, vre)
        #tags[tag] = {'type':val_type,'value':vre}      
      elif val_type in _bam_value_type:
        rem += tag+':'
        rem += 'i'+':'
        val = struct.unpack(_bam_value_type[val_type][1],extra.read(_bam_value_type[val_type][0]))[0]
        rem += str(val)+"\t"
        tags[tag] = TagDatum(val_type, val)
        #tags[tag] = {'type':val_type,'value':val}
      elif val_type == 'B':
        sys.sterr.write("WARNING array not implmented\n")
        continue
        rem += tag+':'
        rem += val_type+':'
        array_type = _bam_value_type[extra.read(1)]
        element_count = struct.unpack('<I',extra.read(4))[0]
        array_bytes = extra.read(element_count*_bam_value_type[array_type][0])
        for by in [array_bytes[i:i+_bam_value_type[array_type][0]] for i in range(0,len(array_bytes),_bam_value_type[array_type][0])]:
          aval = struct.unpack(_bam_value_type[array_type][1],by)
    return [tags,rem.rstrip("\t")]