Add support for parametrizable __str__ in DNSException.
This change makes __init__ and __str__ parametrization simpler
and keeps backward compatiblity with old code which does not use keyword
arguments in raise().
Parametrized __str__ can be implemented simply by defining "fmt" and
"supp_kwargs" class variables in particular exception class.
Doc string is used in cases where specific message parameters were not provided
during instantiation/raise.