qapi: introduce DataObject to describe dynamic structs

This patch introduced a DataObject union in qapi-schema.json,
we use it to describe dynamic data structs.

We will use it in following patches to support to QMP full
introspection. We have many kinds of schema in json file,
they all can be described by DataObject.

This patch also added a doc: qmp-full-introspection.txt,
QMP introspection releated document will be added into it.
It helps to use the new query command and understand the
abstract method in describing the dynamic struct.

Signed-off-by: Amos Kong <akong@redhat.com>
qapi: add qapi-introspect.py code generator

This is a code generator for qapi introspection. It will parse
qapi-schema.json, extend schema definitions and generate a schema
table with metadata, it references to the new structs which we used
to describe dynamic data structs.  The metadata will help C code to
allocate right structs and provide useful information to management
to checking suported feature and QMP commandline detail. The schema
table will be saved to qapi-introspect.h.

The $(prefix) is used to as a namespace to keep the generated code
from one schema/code-generation separated from others so code and
be generated from multiple schemas with clobbering previously
created code.

Signed-off-by: Amos Kong <akong@redhat.com>
qobject: introduce qobject_get_str()

Signed-off-by: Amos Kong <akong@redhat.com>
qmp: full introspection support for QMP

This patch introduces a new monitor command to query QMP schema
information, the return data is a range of schema structs, which
contains the useful metadata to help management to check supported
features, QMP commands detail, etc.

We use qapi-introspect.py to parse all json definition in
qapi-schema.json, and generate a range of dictionaries with metadata.
The query command will visit the dictionaries and fill the data
to allocated struct tree. Then QMP infrastructure will convert
the tree to json string and return to QMP client.

TODO:
Wenchao Xia is working to convert QMP events to qapi-schema.json,
then event can also be queried by this interface.

I will introduce another command 'query-qga-schema' to query QGA
schema information, it's easy to add this support based on this
patch.

Signed-off-by: Amos Kong <akong@redhat.com>
update docs/qmp-full-introspection.txt

Signed-off-by: Amos Kong <akong@redhat.com>