Attach the tooling api caller's stack trace to the end of an exception constructed in the worker thread, so that the caller has some useful context about what they were doing.
Removed the cast for now, turns out not every model implements the protocol interfaces in every version.
Moved the adapting from protocol object to model object down closer to the provider, so that the adapting can be done based on the provider version.