Work around arm64's broken as(1).

The shipped arm64 as(1) is a thin shim around clang's arm64 integrated
assembler, which does not support documented as(1) behavior.

Clang uses file extensions to determine the default action to
take; unless the assembler input has a .s or .S extension, clang
assumes non-assembler input.

As it turns out, `stdin` (eg, passing "-") has no file extension.
To work around this, we have to pass clang '-x assembler' to override
the default behavior. Unfortunately, this flag is not a standard as(1)
flag, so we wind up special casing the arm64 assembler invocation, and
our special casing will likely break when and if this bug is ever fixed.

See also rdar://15162294.
Normalize the ARCH handling across the two ARM trampoline definitions.
An ARCH value is required.
Add ARM64 support.
Define supported architectures using check_architecture().

This replaces the awkward construction that was required for
armv6/armv7/armv7s, where we set the ARCH value to whatever the current
architecture was, if the current architecture was supported.
Allow parameters to be passed into gentramp.sh from the command line.

This simplifies invoking of gentramp.sh from outside of Xcode.