Fix swipe action with target element: #3647

@Jonahss @imurchie (this reviewers of the first merge request that I closed because the new changes are a lot different) 

*  The original scope of this change was adding the ability to specify a destination element when doing a swipe.  Those are the changes you'll see in the server JS.
*  I added a bunch of tests.
*  When I started expanding the test suite for Android, I uncovered some nasty bugs w relative coordinates.  At least one was caused by copy/pasting.  I then discovered similar code (not nec buggy, but using the same patterns) in multiple places in the project.  I consolidated the logic to decrease the likelihood of bugs and ensure that absolute coordinates were all derived in the same way.
*  There's a bunch of spaghetti code.  If you have any suggestions on how I can get rid of it, lmk.
*  There's a change to the sample code that goes along with this.
*  I ran all the Android `touch` tests and they passed, with the exception of 'should work like `longPress` when released after a pause', which also failed for me before the refactoring


It's just a convention many people use in compiled languages to mark
private variables. AFAIK, that's where py, js, etc got the idea that
it's a magic token, rather than the other way around. It's a vestige
of the pre-IDE days, sim to Hungarian notation, but some people still
find it helpful.

I did it by reflex to be honest. I see the other code isn't using it,
so I'll change it.

On 10/31/14, Jonah <notifications@github.com> wrote:
>> +/**
>> + *
>> + * @author saucelabs
>> + */
>> +public abstract class PositionHelper {
>> +  /**
>> +   * Given a position, it will return either the position based on
>> percentage
>> +   * (by passing in a double between 0 and 1) or absolute position based
>> on the
>> +   * coordinates entered.
>> +   *
>> +   * @param pointCoord The position to translate.
>> +   * @param length Length of side to use for percentage positions.
>> +   * @param offset Position offset.
>> +   * @return
>> +   */
>> +  private static double _translateCoordinate(double pointCoord, double
>> length, double offset) {
>
> Why the underscore on the method name? Here in java land, just marking it as
> a private method is enough usually. Unless you had a special reason in mind
> with this one.
>
> ---
> Reply to this email directly or view it on GitHub:
> https://github.com/appium/appium/pull/3943/files#r19696213