refactor generics section to use custom types

we now have the `type label :` syntax for custom types so this
  should be used whenever you use a type that is not a builtin.
signature for Promise<T> should be
```
type Promise<T> : {
  then: (resolved: (result: T) => Any, rejected?: (error: Error) => Any) => Promise<Any>,
  catch: ((error: Error) => Any) => Promise<Any>
}
```

And this is off the top of my head. Actually, promises have a pretty crazy type signature, expanded out :) This would be the sort of thing to define once somewhere and then reference.