Fixed issue #1708: delete cookie inconsitency in Safari

Fixed the issue preventing Appium from deleting some cookies on Safari.  The problem was that Appium was not setting the "Path" field which caused Safari to act as though it could not locate cookies created in previous sessions.  Changes include:

*) Updated ios-controller::setCookie to preserve the invoker's expiry value even when cookie.value is empty. I made this change because backdating the expiry field is the correct way to delete a cookie. We shouldn't force invocations with empty values to delete cookies if the invoker has specified an expiry date. This change shouldn't affect any existing code.
*) ios-controller::setCookie now allows invokers to set the path field and defaults the field to "/" if path is undefined.
*) replaced deprecated toGMTString calls with toUTCString in ios-controller::setCookie.  Afaik, the output strings are the same.
*) Refactored ios-controller::deleteCookies. Replaced the recursive logic and nested conditions with a simple for loop. This makes it much easier to understand, debug, and maintain. It also makes it more performant. I made the change because it was difficult for me to debug.
*) The "deleteAllCookies" test in cookies-base.js will now fail if all cookies are not deleted.
this loop, while seductively simple, isn't the right approach. it hides an async bug.

the reason is that `this.deleteCookie()` doesn't actually delete cookies synchronously. what this code will do is:

0. assign `delResponse` and `delErr`
0. if there are cookies to delete, start a loop
0. in each iteration of the loop, fire off a request to `this.deleteCookie()`, with a callback that reassigns `delResponse` and `delErr`.
0. the loop finishes iterating, and we call back with the current values of `delErr` and `delResponse`
0. now we're in a pickle: we have no idea whether any request to `deleteCookie` has finished yet. we have no idea whether `delResponse` and `delErr` have ever been reassigned or not, so we never know whether an error cropped up in one of the calls to `deleteCookie`

that is why the correct approach is to iterate *synchronously* through a series of *asynchronous* calls. the cleanest way to do this is to use recursion--to perform each call only in the callback of the previous call, ensuring (a) each call happens in time after the previous, and (b) we have the opportunity to short-circuit the loop and call the main callback with an error if one crops up during the sequence.