store and use information about forced repo expiry (RhBug:965410)
YumRPMTransError: use sensible e.value (RhBug:966372)

Less magic is good.
persistent data about repositories should be in cachedir.

so even the regular users can expire their own metadata.
de-support $YUMPDB, not used.
make the dnf.Base object a context manager.

This is a good way to ensure close() is always called.
New version: 0.3.6
build: 0.3.6-1
output: show the RPMDB alternation warning on debug level only.

this is internal and should not scare the user.
implement dnf.repo.Repo.__repr__().
add noop NoOutputCallback.verify_tsi_package().

it's really no use without it.
Take out the bulk of YumBaseCli.doTransaction() and put in in Base.do_transaction().

The part that can reasonably by used by API clients should reside in Base.
do not load available repositories into the sack for the erase command. (RhBug:916662)

Loading available packages invites the solver to replace the removed package
with an alternative, if there's something depending on it, a behavior that is
incompatible with the legacy Yum.
ensure the cachedir in Persistor._expired_repos(). (RhBug:967732)
New version: 0.3.7
build: 0.3.7-1