This module was vendored in the previous commit but was not integrated into
the project. This commit performs that integration.
As part of this, we have to add a handful of new dependencies. The new
dependencies all seem quite reasonable. The versions taken were the exact
ones used by the upstream project.
Should we adopt this crate for error handling?
I feel like our current solution - although it might need a refactor - is good at forcing the programmer to provide context with finer-grained errors that what you are required to do with anyhow. I actually like anyhow better than more involved crates, but we will need to have a good "error hygiene" if you will.
This seems like a better place to discuss this than the previous patch.