Snap multiple relative points

```javascript
interact(target).draggable({
  snap: {
    targets: [ {x: 300, y: 300} ],
    relativePoints: [
      { x: 0, y: 0 },  // snap the top left of the element
      { x: 1, y: 1 },  // also snap the bottom right of the element
    ]
  }
});
```

There are effectively `( targets.length * max( relativePoints.length, 1 ) )` snap targets when snap calculations are done. If no `relativePoints` array is specified or the array is empty then snapping is relative to the pointer coordinates (default).

Backwards compatible with the old snapping API and `elementOrigin`.

```javascript
interact(target).snap({
  mode: 'anchor',
  anchors: [ {x: 300, y: 300} ],
  elementOrigin: { x: 0, y: 0 }    // only one elementOrigin is possible
});
```

Closes #132