make sure all of our async handles are stopped before stopping the map thread
use util::ptr as a wrapper around std::shared_ptr that asserts nonemptiness
use separate workers for tile parsing to avoid blocking the threadpool for other libuv actions