Properly let floating-point instructions through in the BEAM compiler

The compiler shouldn't crash when fed an already-optimised BEAM assembly file.
Properly collect allocate_zero instructions in beam_block

If an allocate_zero instruction is fed to beam_block and the beam_type
pass is not used afterwards (e.g. with erlc +no_topt), the 'no_opt' atom
will be rejected by beam_flatten.
Collect all optimised allocate instructions in beam_block

Any init instruction following an allocate is put in the Inits list of the
corresponding alloc tuple.
Add missing recv_set, recv_mark and '%' to BEAM live annotation
Keep exit blocks in order when moving them in beam_jump

This makes applying the pass a second time a no-op.
Test compilation of BEAM assembly with optimisations on
Officially support building assembler files

erlc is wired to treat *.S files as assembler and build them as
compile:file(File, [from_asm]), but this is not documented. There's also
a documented compile:file/2 option called 'asm' (mapping to 'from_asm'),
but the wording discourages its use. All of this has been in place and
in use for a long time. Therefore, it should be supported officially.

To fix that, make the following changes:
 * document erlc handling of *.core files
 * un-document 'asm' and document 'from_asm' instead
 * deprecate 'asm'

While at it, fix a minor typo in the test suite.
Officially support building core files

erlc is wired to treat *.core files as core and build them as
compile:file(File, [from_core]), but this is not documented. There's
also an udocumented compile:file/2 option called 'from_core'. This has
been in place and in use for a long time. Therefore, it should be
supported officially.

To fix that, make the following changes:
 * document erlc handling of *.core files
 * document 'from_core'