Implement XSL extension

Hello,

I am currently working on implementing the XSL extension in HHVM. The current pull request is a WIP, with notably the following items left to do:
  - allow SimpleXMLElement objects for importStylesheet.
  - allow Node arguments to registered PHP functions.
  - allow multiple parameters for setParameter.
  - implement setSecurityPrefs/getSecurityPrefs.
  - consider namespaceURI for parameters.
  - add EXSLT support.

Beside that, the current implementation seems to be working smoothly. I tested it one some "production" code, and on an improved version of the very classical "collection.xsl" example (as found on PHP website), using HHVM in server mode and Apache Benchmark:

$ cat collection.xml 
<collection>
 <cd>
  <title>Fight for your mind</title>
  <artist>Ben Harper</artist>
  <year>1995</year>
 </cd>
 <cd>
  <title>Electric Ladyland</title>
  <artist>Jimi Hendrix</artist>
  <year>1997</year>
 </cd>
</collection>

$ cat collection.xsl 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl">
 <xsl:output method="html" encoding="iso-8859-1" indent="no"/>
 <xsl:template match="collection">
  Hey! Welcome to <xsl:value-of select="php:function('rawurlencode', string($owner))"/>'s sweet CD collection!
  <xsl:apply-templates/>
 </xsl:template>
 <xsl:template match="cd">
  <h1><xsl:value-of select="title"/></h1>
  <h2>by <xsl:value-of select="artist"/> - <xsl:value-of select="year"/></h2>
  <hr />
 </xsl:template>
</xsl:stylesheet>

$ cat test.php 
<?php
$xslDoc = new DOMDocument();
$xslDoc->load("collection.xsl");
$xmlDoc = new DOMDocument();
$xmlDoc->load("collection.xml");
$proc = new XSLTProcessor();
$proc->importStylesheet($xslDoc);
$proc->setParameter("", "owner", "Nicolas Eliaszewicz");
$proc->registerPHPfunctions('rawurlencode');
echo $proc->transformToXML($xmlDoc);
echo $proc->transformToDoc($xmlDoc)->saveXML();
$proc->transformToURI($xmlDoc, 'file:///dev/stdout');
?>

$ hhvm -m server -p 8000 -vEval.Jit=true
$ ab -n 10000 -c 200 http://127.0.0.1:8000/test.php
[...]
Concurrency Level:      200
Time taken for tests:   6.379 seconds
Complete requests:      10000
Failed requests:        0
[...]

I plan to complete the implementation, including the to do items listed above. In the meantime, would you mind comment on my code? I am new to both HHVM and C++.

Thank you for the awesome software HHVM is!

Signed-off-by: Arthur Loiret <arthur.loiret@ens-lyon.fr>