text: Title: Codegen should be able to know the `__typename` for an object
  Body: <!--- Provide a general summary of the changes you want in the title above. -->
  
  <!--- This template is entirely optional and can be removed, but is here to help both you and us. -->
  <!--- Anything on lines wrapped in comments like these will not show up in the final text. -->
  
  ## Feature Request Type
  
  - [ ] Core functionality
  - [x] Alteration (**backward compatible enhancement**/optimization) of existing feature(s)
  - [ ] New behavior
  
  ## Description
  
  The code generator doesn't (currently) know very much about the GraphQL types.  e.g. a query like:
  
  ```
  query OperationName {
    __typename
    union {
      ... on Animal {
        age
      }
      ... on Person {
        name
      }
    }
  }
  ```
  
  Will generate classes like:
  
  ```py
  class OperationNameResultUnionAnimal:
      # typename: Animal
      age: int
  
  class OperationNameResultUnionPerson:
      # typename: Person
      name: str
  
  OperationNameResultUnion = Union[OperationNameResultUnionAnimal, OperationNameResultUnionPerson]
  
  class OperationNameResult:
      union: OperationNameResultUnion
  ```
  
  In principle, the `__typename` field of the response should tell us whether we are going to get an `Animal` or a `Person`, but it would be very handy for client generators to be able to easily construct the following mapping:
  
  ```py
  {"Animal": OperationNameResultUnionAnimal, "Person": OperationNameResultUnionPerson}
  ```
  
  Currently, this is very hard to do with the information exposed to the client generator.  Let's plumb that information through so that clients can start to take advantage of it.