Adds handshake and connection source handling

## What is this PR? 

Adds handshake support and allows agent connections to control the message source.

## How it works

- [x] Adds token parameter to the agent constructor options
- [x] Adds token parameter to Connection constructor options
- [x] Makes Connection handshake message match virgo-base-agent handshake message
- [x] Updates Heartbeat feature metadata to match aep expectation
- [x] Nit: updates virgo.js version to match npm published version
So, it's verifying message ID below. It's comparing two different `msg` objects. It works because `id` is always `0` (rather than incremented) and it doesn't matter if you call `self._handshakeMessage()` multiple times, but would it be more logical if the `msg` here and the one passed into `this.writable.write()` are the same object?