Basic serialization

In my search through available JSON libraries, I came across Gson, which seems a lot nicer than writing everything ourselves. Everything's pretty basic and the "test" isn't much of a test yet, just something to see what it outputs. From what I can see there isn't anything to do with adding actual values to the schematic yet, just type definitions?

Also, I'm kind of lost on the whole TypeTypeDefinition / PrimitiveType / PrimitiveKind stuff. I recall seeing another pull request where they were removed... was that not merged in yet?

Aside: I think my formatter went a little crazy on some of the lines. Let me know if you guys care about those (although some of them were really long)

Here's the output from running that 1 basic test:
```
{
  "name": "test",
  "typeTypeDefinitions": {
    "Bool": {
      "type": {
        "kind": "BOOLEAN"
      },
      "typename": "Bool"
    },
    "String": {
      "type": {
        "kind": "STRING"
      },
      "typename": "String"
    },
    "Int": {
      "type": {
        "kind": "INTEGER"
      },
      "typename": "Int"
    }
  },
  "endpointTypeDefinitions": {
    "n1": {
      "attributes": {},
      "typename": "n1"
    }
  },
  "nodeTypeDefinitions": {
    "foo": {
      "attributes": {},
      "endpoints": {},
      "typename": "foo"
    }
  },
  "connectionTypeDefinitions": {},
  "constraintTypeDefinitions": {
    "c1": {
      "arguments": {},
      "typename": "c1"
    }
  },
  "nodes": {},
  "connections": {},
  "constraints": {}
}
```