Union type fixes and optimizations

This PR fixes issues relating to apparent types and union types and also optimizes materialization of properties in union types. It also makes union types a separate kind of type, distinct from object types.

The following types and methods have changed:

Method|Change
---|---|---
**getPropertiesOfType**|Returns property list of any kind of type
**getApparentPropertyOfType**|Returns an apparent property of any kind of type
**getSignaturesOfType**|Returns (apparent) call signatures of any kind of type
**getIndexTypeOfType**|Returns (apparent) index signature of any kind of type
`getPropertiesOfObjectType`|Returns property list of an object type
getAugmentedPropertiesOfType|Returns augmented property list of any kind of type
getPropertyOfObjectType|Returns a property of an object type
getSignaturesOfObjectOrUnionType|Returns call signatures of an object or union type
getIndexTypeOfObjectOrUnionType|Returns index signature of an object or union type
resolveObjectOrUnionTypeMembers|Resolves members of object or union types

The methods in **bold** are the ones that code would typically use. They now automatically convert the given type to its apparent type before performing the operation.

The ResolvedObjectType type has been renamed to ResolvedType because it now covers both object and union types. The ApparentType type is no longer needed and has been removed.

Materialization of union type properties previously happened in resolveObjectTypeMembers but is now done on demand per property through the getApparentPropertyOfType method.