Better XPath support

This pull request addresses both #42 and #39.

Node.EvalXPath handles evaluating an XPath that returns a string or number instead of a nodeset. Unhandled return types are now coerced into a string.

Node.SearchWithVariables and Node.EvalXPath both take a VariableScope that allows XPath expressions to resolve any variable names. This is specifically needed for my XSLT processor and may be useful in other contexts.