Move the single include guard after multiple inclusion one

GCC (and other compilers) can optimise multiple inclusion of headers if
they find the:

  #ifndef FOO
  #define FOO

  #endif

pattern as the first thing inside a header. The single-header inclusion
guard was preventing that from happening, so we need to move it inside
the multiple inclusion guard.
Make json-gvariant.h conform to the other headers

Only include the necessary headers, and use a single-header inclusion
guard to prevent people from including only json-gvariant.h.