Remove required type field from channel blobs

When we first introduced the channel blob types, the JSON blobs were
self identifying by a required "type" field in the JSON object
itself. This, as it turns out, was a bad idea.

When we introduced the message router, it was useless for routing based
on the JSON type. And messages had two type fields to check: the
stasis_message_type() of the message itself, plus the type field in the
JSON blob (but only if it was a blob message).

This patch corrects that mistake by removing the required type field
from JSON blobs, and introducing first class stasis_message_type objects
for the actual message type.

Since we now will have a proliferation of message types, I introduced a
few macros to help reduce the amount of boilerplate necessary to set
them up.

Review: https://reviewboard.asterisk.org/r/2509


git-svn-id: http://svn.asterisk.org/svn/asterisk/trunk@388005 f38db490-d61c-443f-a65b-d21fe96a405b
Don't perform a realtime lookup with a NULL keyword

Previously, a call to ast_load_realtime_multientry could get away with
passing a NULL parameter to the function, even though it really isn't
supposed to do that. After the change over to using ast_variable instead
of variadic arguments, the realtime engine gets unhappy if you do this.

This was always an unintended function call in app_directory anyway - now,
we just don't call into the realtime function calls if we don't have anything
to query on.

git-svn-id: http://svn.asterisk.org/svn/asterisk/trunk@388008 f38db490-d61c-443f-a65b-d21fe96a405b
Fixed set-but-not-used warning caught by newer GCC

git-svn-id: http://svn.asterisk.org/svn/asterisk/trunk@388014 f38db490-d61c-443f-a65b-d21fe96a405b