Infoxchange steps upstreaming

This is a pretty epic branch.

It started out as pulling out all of the private steps I've used in a project here at Infoxchange. I then did some pep8 cleanups and refactored the test suite, before writing some tests, and then fixing up some deficiencies in the steps. I then did a bit more refactoring to hopefully make a few XPath lookups faster on big DOMs.

Steps are all separate in case you only want to cherry-pick some of them; although I think they're all generally useful.