No longer require --app to start appium; support desiredCaps method

Lots of big stuff:

*  allow an 'app' desired capability which is an absolute local path or a url to a zip file
*  appium will now download and unzip a file sent in this way to use
*  appium doesn't remember an app that was sent in via desiredCaps, so future requests will go back to using whichever app was passed in through the --app param (if it was there)
*  made lots of robustness and error handling improvements along the way
*  for example, if the instruments client doesn't check in after a specified amount of time (here 30s), the appium server is notified and drops the session so it can start new sessions