Fix #14503: Cast to string before setting XHR header

When setting request header to a `null` value, __Microsoft.XMLHTTP__ throws a `Type Mismatch` exception. This means that in IE6+ passing a `null` value in the `headers` property causes `$.ajax` to fail. (IE7 and above require users to uncheck _"Enable native XMLHTTP support"_ in settings).

After a discussion the proposed solution was to skip `undefined` and cast to string in other cases.

Relevant tests have been extended and existing tests modified to fit new changes. [See the discussion on jQuery Bug Tracker](http://bugs.jquery.com/ticket/14503).

Changes to existing tests:

- `headers.php` now echo headers that have non-empty values