IE 9+ fixes

* Fix making PUT/DELETE requests by uppercasing the HTTP method name
* This also fixes PATCH for Chrome/Safari
* Fix requests with undefined body on IE
* IE 9 fix for connection error
* Fix CSS being applied to test suite

The only test that now fails is the FormData test on IE 9. Maybe we should skip that test if FormData is unavailable?
Sure, although readystatechange forces us to encode two magic numbers instead of one: `4` for readyState and `200 <= status < 599` for responses that should resolve a promise. If you find that better I can do the change.