Better basic block dead-code elimination

This handles cases where blocks may merge to non-dead code later on.
Fix basic block output ordering - handle previous blocks properly

This makes sure all blocks prior to the one currently being emitted,
have already been emitted - this fixes problems with debug scope
labelling and function-end-returns embedded part way through a
function's asm.
Explain dead-code-elimination condition
Test debug label emission with local variables
Unreachable code examples
noreturn functions end basic blocks
Unreachable code tests
Unreachable scope - needs debug label from feature/inline
Merge branch 'master' into feature/improved-dce

This brings in debug label support.

Conflicts:
	src/cc1/ops/expr_funcall.c
	src/cc1/out/blk.c
Add GEN_CONST_CAST() to funcall unreachable code
Fix passing force from branch-blocks
Correct ordering of blk->emitted and force checks

'emitted' must be set before flushing the merge predecessors (so a
block isn't emitted twice), but this must be set after the check
for force, so if we emit a block twice (once without force, then
once with), we don't mutate its emitted state the first time, without
forcing its emission.
Rename/move DCE tests
Add -fdump-bblocks for dumping basic blocks in dot-format
Emit only reachable blocks - using two passes

The first pass figures out which blocks are reachable, the second
emits all reachable blocks in the right order.

This beats using one pass as we know if a block is reachable the
first time we emit it, ensuring the right block ordering, rather
than trying to emit it later in the wrong place when we figure out
that it is reachable.
Basic block flow tests
Merge branch 'feature/improved-dce'

This brings in better dead-code elimination.