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
I see, yes that makes sense. Maybe worth documenting the structure somewhere? This is just a nitpick but I'm not sure the name "extra_host_tags" conveys that exactly. For me at least I thought that it was extra tags for _this_ host that's running the agent. Maybe something like "external_host_tags" or "other_host_tags" would be more fitting? Not a big deal if you'd rather just leave it though, as long as it's clear for future maintainers.