code: public Attributes intersect(Attributes that)
      {
          if (that == null || that.isEmpty()) return NONE;
  
          Attributes result = new Attributes();
  
          for (Tag tagToRetain : that.attributes.keySet())
          {
              for (Iterator<Tag> tags = attributes.keySet().iterator(); tags.hasNext(); )
              {
                  Tag tag = tags.next();
                  if (tagToRetain.matches(tag))
                      result.attributes.put(tag, attributes.get(tag));
              }
          }
          return result;
      }
docs: Retains the attributes of this <code>Attributes</code> object that are present in the given
  <code>Attributes</code> object, returning a new <code>Attributes</code> object.
  The resulting <code>Attributes</code> will contain only the attributes whose tags are present in this
  <code>Attributes</code> object and in the given <code>Attributes</code> object.
  If a tag in the given <code>Attributes</code> object contains the globbing character '*', all attributes in this
  <code>Attributes</code> object that match will be retained.
  If the given <code>Attributes</code> is null or empty, {@link Attributes#NONE} will be returned.
  
  @param that The <code>Attributes</code> to intersect with
  @return A new <code>Attributes</code> object containing the intersection of the attributes.
  @see #union(Attributes)
  @see #complement(Attributes)