Use Authorize.Net's XML API

Work in progress. Supercedes #1219.

TODO:

- [x] Figure out mapping for `x_solution_id`.
- [x] Figure out how to pass currency code (`x_currency_code`).
- [x] Match semantics of old `Response#authorization`.
- [x] Match semantics of old `Response#params` as closely as possible.
- [x] Replace `AuthorizeNetGateway` with `AuthorizeNetXmlGateway`.
- [x] Flatten unit and remote tests.
Did this work to set the nil value to 0?  I thought I had tried this and it failed with an invalid amount.