Refactor appium.js

This is a massive refactor that separates the concerns of configuring various devices and desired caps. Each device is now responsible for its own configuration. This makes the appium.js code much cleaner and easier to understand. Edge cases for devices are now the responsibility of the individual device and don't clutter up global code. Parameters for devices are encapsulated in an `args` variable on the device, rather than having dozens of lines of `this.someArg = opts.someArg;`

New unit tests were added for desired cap -> device parsing.

All Appium tests pass with these changes.