Typecheck noasync attr
This patch adds validation to ensure that the noasync attribute is only
applied to useful declarations.
Specifically, the `noasync` attribute cannot be applied to `deinit`
declarations, asynchronous functions, or asynchronous properties.