Initially, utils::packageVersion() is used to try to retrieve a version
from a package's DESCRIPTION file. This is a fast method, but doesn't
categorically guarantee that the package is actually available to use.
If load = TRUE, then base::requireNamespace() is used to try to load the
namespace of each package in turn. This is much slower, but is the closest we
can get to ensuring that the package is genuinely usable.