Parse inline assembly.
Wrap llvm::InlineAsm::AsmDialect
Require unsafe block for inline assembly.
Create asm! syntax extension.
Stop parsing __asm__.
Parse operands properly and add a way to indicate volatile asm.
Keep everything tidy.
Add alignstack option for inline asm.
auto merge of #5317 : luqmana/rust/inline-asm, r=graydon

```Rust
#[cfg(target_os = "macos")]
fn helloworld() {
    unsafe {
        asm!(".pushsection __RODATA, __rodata
                  msg: .asciz \"Hello World!\"
              .popsection
              movq msg@GOTPCREL(%rip), %rdi
              call _puts");
    }
}

#[cfg(target_os = "linux")]
fn helloworld() {
    unsafe {
        asm!(".pushsection .rodata
                  msg: .asciz \"Hello World!\"
              .popsection
              movq msg@GOTPCREL(%rip), %rdi
              call puts");
    }
}

fn main() {
    helloworld();
}
```

```
% rustc foo.rs
% ./foo
Hello World!
```