accept Vec2 to set(), silent option, and toJSON

I found I have been using this a lot with this pattern

``` js
elPos.set(initial, silent=false).add(mouse)
```

`silent` means you can work much better with the mutability in combination with observers.

Also, added `toJSON` and I noticed that subtract doesn't use `set()`, so I fixed that too.