Validate xml improvements

This will break backward compatibility, as it changes the function's return value from a bool_or_string to a (bool, ErrorLog) tuple. I think it's fair to say that the function was broken in the first place, so a backward incompatible change isn't horrible.
Why `error_log.last_error`? The [lxml api docs](http://lxml.de/api.html#error-handling-on-exceptions) says:
> There is also a convenience attribute `last_error` that returns the last error or fatal error that occurred:

It seems like you might want to know about **all** the validation errors? You could possibly build an error report string like

```python
validation_errors = "\n".join([str(x) for x in error_log])
```