Implement DebuggerMessageContext

This is a context which gets reset automatically after successfully
sending a message to the frontend.  Particularly useful for returning
data which only needs to exist until it's sent to the frontend.
Avoids code like this:

str = DoSomething();
send_protocol_message(foo, "s", str);
/* might have disconnected, thus resetting DebuggerMemoryContext */
if (frontend)
	pfree(str);

which had started to creep its way into the code base.