dirstate: stringify a few exception messages
Built in exceptions want str, and ProgrammingError converts bytes to str
internally (because it subclasses RuntimeError).
skip ignored directories if -i or --all not specified
$ hg init t
$ cd t
$ echo 'ignored' > .hgignore
$ hg ci -qA -m init -d'2 0'
$ mkdir ignored
$ ls
ignored
$ hg purge -v --no-confirm
$ ls
ignored