implement a robust mocked-out appium server for testing

DO NOT MERGE YET

This is a POC, for feedback. The idea is that it would be very useful to have a type of Appium device that responds to requests instantly. I'm thinking of a few use cases:

* testing the Appium clients---the Appium testsuite tests Appium functionality, so the clients don't need to test it, only the well-formedness of requests and responses
* testing the Appium HTTP API in a few seconds, rather than a few hours
* adding scaffolding to support the migration of the controller structure in Appium. Currently each device is responsible for knowing about the JSONWP and responding to the client; controller.js then forwards the response on. Instead, each device should respond with a node callback response signature: `(err, val)`, and controller.js should be the only thing that knows about the JSONWP.

The basic idea is that we add a new kind of MockDevice, which knows how to 'automate' 'apps' (whose structure is specified by XML documents; these are essentially static since we don't care about testing any actual behavior). It would then be very simple to build a comprehensive mock 'test app' XML fixture which is shared between Appium clients. Client tests could even be run very quickly on every Appium commit, at the speed of what is essentially a unit test.

@sebv @bootstraponline @imurchie @Jonahss @0x1mason