Real-time collaboration
### yjs plugin

- [x] YjsDocSyncPlugin
- [x] YjsUserPresencePlugin
- [x] Separate as a package `@dgmjs/yjs-sync`

### doc sync

- [x] Order of shape is not matched after `flush()`
- [x] Large data not synched
   - Related issue: https://github.com/yjs/y-webrtc/issues/20
   - Patch for this issue: https://github.com/disarticulate/y-webrtc
- [x] Test copy and paste composite shapes
- [x] Need to know when doc sync is ready (event) when `flush()` is completed

### user presence

- [x] user's dragging area
- [x] user's shape selection
- [x] user's current page
- [x] cursor still exists even if the user exit
- [x] cursor position is slightly not matched (more right and more bottom)

### provider

- [x] Need our-own a WebRTC signaling server
   - [x] Sync not work between Chrome (webRTC) <---> Safari : https://github.com/yjs/y-webrtc/issues/19
   - [x] Sync not work between difference device (webRTC)
   - https://medium.com/collaborne-engineering/serverless-yjs-72d0a84326a2
