Framework for exception messages "levels" + func.__str__ with name

And now, something completely different. That's why I started to refactor func error functions, as a usecase. Hopefully this patch gives good framework to actually do consistent exception messages refactor.