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 optimized allocate instructions in beam_block

Any init instruction following an allocate is put in the Inits list of the
corresponding set alloc tuple.
Properly live-annotate recv_set and recv_mark in beam_utils:live_opt
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