allow toXML to be called sync, respect conventions

The toXML method currently takes a callback with
only one argument, the xml. Node's convention
demands that the callback take an error,
and then the result.

All toXML is doing is calling `toString`, so there
is no need for the method to be async,
it wrongly implies that there is a difference
between the sync and async version. But at
this moment removing this method would break
existing users.

This commit makes toXML optionally sync, if no
callback is passed on. If one is passed, it verifies
if the callback expects one or two arguments,
effectively emulating the previous behavior, while
still allowing correct node convetions with error
and result being passed to the callback.

Expresso was also updated to better
allow for async tests.