I came up with this handy-dandy transformation of XSL templates from version 1.0 to 2.0 which also inserts the saxon namespace in the output.  Once I combine this with a directory-scanning batch processor, my 200+ 1.0 source templates can now be upgraded automagically. 
It will be worth extra credit if I can get this template to catch all the variances in function calls from EXSL 1.0 to Saxon implemented 2.0 functions, such as the dyn:evaluate->saxon:evaluate refactoring, str:tokenize() to tokenize() and dt:format-date to format-date() with the proper casting of strings to xs:date().  Yet even without it, this automation is a huge help. 
In this template, I use for the first time the <xsl:namespace-alias/> and <xsl:namespace/> grammar elements.  I'm learning new things every day.
<?xml version="1.0" encoding="UTF-8"?>
<x:stylesheet xmlns:x="
    <x:output method="xml" indent="yes"/>
    <x:namespace-alias stylesheet-prefix="xsl" result-prefix="x"/>
    <x:template match="/">
        <x:apply-templates select="* | text() | processing-instruction() | comment()"/>
    <x:template match="/*" >
            <x:namespace name="saxon">http://saxon.sf.net/</x:namespace>
            <x:attribute name="version">2.0</x:attribute>
            <x:apply-templates select="* | @* | text() | processing-instruction() | comment()"/>
    <x:template match="
    <x:template match="
        <x:attribute name="extension-element-prefixes">
            <x:text>saxon </x:text><x:value-of select="."/>
    <x:template match="* | @* | text() | processing-instruction() | comment()">
        <x:copy copy-namespaces="yes" >
            <x:apply-templates select="* | @* | text() | processing-instruction() | comment()"/>