Annotate all CloudFormation resource types with the type of their 'Ref'
(whether it returns a `Name`, `Id` or `Arn`). We generate specific
classes for those types, just like we do for `{Fn::GetAtt}` attributes.
This makes it easier to write construct libraries: it removes the need
for every construct library to explicitly declare a custom type for the
ref implicit type, and reduces chances of a `ClassCastException` in Java
if they do it wrong.
Generated resource classes no longer implicitly inherit from
`Referenceable`, because not all resources even have the `{Ref}`
operator defined.
Fixes #619.