rix0rrr BREAKING CHANGE: strongly type resource refs (#627)
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.
Latest commit 755488e Aug 27, 2018