First shot at implementing a vSphere check

cc @remh
- [x] Get metrics for all the VMs and hosts
- [x] Selection flag for all_metrics or a set of "basic_metrics"
- [ ] Get metrics from datastore
- [ ] Metrics tagged with vm/host/cluster/datacenter tags and instance tags (~device)
- [x] Get events from vCenter
- [x] Filter these events, get only the types that are interesting + ignore certain messages with regexes
- [x] Tag VM events with VM tags
- [ ] Tag other events with proper tagging?
- [ ] Go through the list of events and select what we want https://github.com/vmware/pyvmomi/tree/master/docs/vim/event
- [x] Report host tags through another param in the payload we send to the intake
- [x] Multithread the requests asynchronously with the ThreadPool class
- [x] Display the async job failures in the logs

Before release:
- [ ] Remove the TEST-INSTRUMENTATION code for release
- [ ] Remove unuseful debugging strings for release
Hey Conor, so extra_host_tags are host-tags that are not related to the host running the agent.
vSphere uses that because we view the whole host list through a single point: the agent check running. So we add something like:
`[(this other host, {vsphere: [tag1, tag2]}, ...]`

Does that make sense?