If you want your classes without repetitions, then use the following XSLT:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:exsl="http://exslt.org/common"
  extension-element-prefixes="exsl">
  <xsl:output method="xml" encoding="UTF-8" indent="yes" />
  <xsl:template match="/">
    <document>
      <xsl:variable name="cls1">
        <xsl:for-each select=".//header/@class">
          <xsl:call-template name="tokenize">
            <xsl:with-param name="txt" select="."/>
          </xsl:call-template>  
        </xsl:for-each>
      </xsl:variable>
      <xsl:variable name="cls" select="exsl:node-set($cls1)"/>
      <header>
        <xsl:attribute name="class">
          <xsl:for-each select="$cls/*[not(preceding-sibling::* = .)]">
            <xsl:value-of select="."/>
            <xsl:if test="position() < last()">
              <xsl:text> </xsl:text>
            </xsl:if>
          </xsl:for-each>
        </xsl:attribute>
      </header>
    </document>
  </xsl:template>
  <xsl:template name="tokenize">
    <xsl:param name="txt"/>
    <xsl:if test="$txt">
      <xsl:if test="contains($txt, ' ')">
        <cls>
          <xsl:value-of select="substring-before($txt, ' ')"/>
        </cls>
        <xsl:call-template name="tokenize">
          <xsl:with-param name="txt" select="substring-after($txt, ' ')"/>
        </xsl:call-template>
      </xsl:if>
      <xsl:if test="not(contains($txt, ' '))">
        <cls>
          <xsl:value-of select="$txt"/>
        </cls>
      </xsl:if>
    </xsl:if>
  </xsl:template>
</xsl:transform>
In XSLT 1.0 it is much more difficult than in XSLT 2.0, but as you see,
it is possible.
Edit
A revised version using Muenchian grouping (inspired by comment from Michael):
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:exsl="http://exslt.org/common"
  extension-element-prefixes="exsl">
  <xsl:output method="xml" encoding="UTF-8" indent="yes" />
  <xsl:variable name="cls1">
    <xsl:for-each select=".//header/@class">
      <xsl:call-template name="tokenize">
        <xsl:with-param name="txt" select="."/>
      </xsl:call-template>
    </xsl:for-each>
  </xsl:variable>
  <xsl:variable name="cls2" select="exsl:node-set($cls1)"/>
  <xsl:key name="classKey" match="cls" use="."/>
  <xsl:template match="/">
    <document>
      <header>
        <xsl:attribute name="class">
          <xsl:for-each select="$cls2/*[generate-id() = generate-id(key('classKey', .)[1])]">
            <xsl:value-of select="."/>
            <xsl:if test="position() < last()">
              <xsl:text> </xsl:text>
            </xsl:if>
          </xsl:for-each>
        </xsl:attribute>
      </header>
    </document>
  </xsl:template>
  <xsl:template name="tokenize">
    <xsl:param name="txt"/>
    <xsl:if test="$txt">
      <xsl:if test="contains($txt, ' ')">
        <cls>
          <xsl:value-of select="substring-before($txt, ' ')"/>
        </cls>
        <xsl:call-template name="tokenize">
          <xsl:with-param name="txt" select="substring-after($txt, ' ')"/>
        </xsl:call-template>
      </xsl:if>
      <xsl:if test="not(contains($txt, ' '))">
        <cls>
          <xsl:value-of select="$txt"/>
        </cls>
      </xsl:if>
    </xsl:if>
  </xsl:template>
</xsl:transform>