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 have one small concern with this change and that's whether or not rounding/truncation when converting to int will cause any inaccuracies when checking bounds.  That has to be a freaky edge case though, which is why I went ahead and did it this way.