give Diagnostics the ability to format DeclContexts

DiagnoticsEngine grows a settable ArgToStringFunction to do the
actual conversion. It's a bit icky that Basic is now forward-declaring
a class that's in Sema, but that matches what clang does.

Not used yet.
print declcontext in unknown field diag -- for now as <can't format argument>