fix Issue 12979 - Nothrow violation error is hidden by inline assembler

- deprecate using unattributed asm in attributed functions

- add explicit attributes on asm statments (unverified by compiler)

  asm pure nothrow @nogc @trusted {
    //...
  }

- added new CompoundAsmStatement because the parser
  already splits asm blocks into many AsmStatements

This was somewhat annoying, `pure`, `@safe`, and `@nogc` are inferred bottom-up while `nothrow` (blockExit) uses a top-down approach.