file-utils: added px:tempdir step

for creating a temporary directory that is guaranteed not to already exist.
px:tempdir: import file-library and mkdir dependency
Some improvements to fileset-store

* Store binary files
* Don't omit XML declaration
* Don't store files with @media-type='text/xml' as text
px:tempdir documentation
file entry names in zip files are now percent decoded
More uri-utils functions

 * pf:is-absolute
 * pf:is-relative
 * pf:get-path
 * pf:replace-path
 * pf:unescape-uri
Add a pf:file-exists function to saxon
make p:fileset-store indent XML docs
Fix uri function pf:is-absolute
Added XSpec tests for uri-functions.xsl

(pushing straight to master - no change to source files)
Fixed a typo
processor independent logging steps: px:message/px:error/px:assert

All steps takes a "message" option and nine optional "param[1-9]" options.
"$1", "$2", ..., "$9" in the message value will be replaced with the values
in their corresponding param option. For instance:

<px:message message="The current XProc processor is: $1">
    <p:with-option name="param1" select="p:system-property('p:product-name')"/>
</px:message>

The above code will output "[INFO] The current XProc processor is: XML Calabash".

The px:message step has a "severity" option that can be either
WARN, INFO or DEBUG. The default is INFO. There is no ERROR level as
that is what px:error is meant for.

The px:error step has the "code", "code-prefix" and "code-namespace" options.
These are equivalent to the ones used for the standard p:error step, except
that the namespace has to be specified explicitly when a prefix is used; it
cannot be inferred from the calling pipeline. For instance:

<px:error message="It is an error to do whatever" code="err:PCU00" code-namespace="http://www.w3.org/ns/xproc-error"/>

(As with p:error, a un-prefixed code with no namespace can be used as well)

The px:assert step has the "test" option which must be "true" or "false".
It also takes the optional options "error-code", "error-code-prefix"
and "error-code-namespace" which are provided to px:error if the value of
"test" is "false". If no error code is provided, a warning is displayed using
px:message instead. For instance:

<px:assert message="The fileset must not contain any absolute URIs: $1 (and $2 more)" error-code="err:PEX01" error-code-namespace="http://www.w3.org/ns/xproc-error">
    <p:with-option name="test" select="count(//d:file[matches(@href,'^\w+:')]=0"/>
    <p:with-option name="param1" select="(//d:file[matches(@href,'^\w+:')])[1]"/>
    <p:with-option name="param2" select="count(//d:file[matches(@href,'^\w+:')]-1"/>
</px:assert>

px:message and px:assert (unless an error is thrown) works like a p:identity
step in that they output the same as they get in.

The steps are used by importing http://www.daisy.org/pipeline/modules/common-utils/logging-library.xpl

These are the step signatures:

<p:declare-step type="px:message" ...>
    <p:input port="source" primary="true" sequence="true"/>
    <p:output port="result" sequence="true"/>
    <p:option name="severity" select="'INFO'"/>
    <p:option name="message" required="true"/>
    <p:option name="param1" select="''"/>
    <p:option name="param2" select="''"/>
    <p:option name="param3" select="''"/>
    <p:option name="param4" select="''"/>
    <p:option name="param5" select="''"/>
    <p:option name="param6" select="''"/>
    <p:option name="param7" select="''"/>
    <p:option name="param8" select="''"/>
    <p:option name="param9" select="''"/>
</p:declare-step>

<p:declare-step type="px:error" ...>
    <p:output port="result" sequence="true"/>
    <p:option name="code" required="true"/>
    <p:option name="code-prefix" select="''"/>
    <p:option name="code-namespace" select="''"/>
    <p:option name="message" required="true"/>
    <p:option name="param1" select="''"/>
    <p:option name="param2" select="''"/>
    <p:option name="param3" select="''"/>
    <p:option name="param4" select="''"/>
    <p:option name="param5" select="''"/>
    <p:option name="param6" select="''"/>
    <p:option name="param7" select="''"/>
    <p:option name="param8" select="''"/>
    <p:option name="param9" select="''"/>
</p:declare-step>

<p:declare-step type="px:assert" ...>
    <p:input port="source" primary="true" sequence="true"/>
    <p:output port="result" sequence="true"/>
    <p:option name="test" required="true"/>
    <p:option name="error-code" select="''"/>
    <p:option name="error-code-prefix" select="''"/>
    <p:option name="error-code-namespace" select="''"/>
    <p:option name="message" required="true"/>
    <p:option name="param1" select="''"/>
    <p:option name="param2" select="''"/>
    <p:option name="param3" select="''"/>
    <p:option name="param4" select="''"/>
    <p:option name="param5" select="''"/>
    <p:option name="param6" select="''"/>
    <p:option name="param7" select="''"/>
    <p:option name="param8" select="''"/>
    <p:option name="param9" select="''"/>
</p:declare-step>
XPath 1.0 support in px:error and px:assert
removed p:choose that did nothing
minor fix: assertion would always throw error instead of warning
px:error: minor change
make pf:normalize-uri normalize invalid characters
Improvements to px:fileset-store

- added a 'fail-on-error' option that can be set to 'false' to keep
  processing the fileset if an error occurs
- the returned fileset contains only the resources that have been
  stored successfully
normalize-uri: double escape test
file-utils: URL normalization and more xspec tests

Without URL-normalization, px:fileset-add-entry couldn't add 8.3-formatted
Windows-filenames. For instance, "Documents and Settings" becomes
"DOCUME~1", which wasn't recognized as the same as "DOCUME%7E1"
in pf:relativize-uri.