Stability lint for nested macros

Finishes the job of #17286.

Now the stability lint will successfully detect patterns such as:
```
first_macro!(second_macro!(deprecated_function()));
```
```
macro_rules! foo (
    ($e: expr) => (bar!($e))
)
foo!(deprected_function());
```
and
```
println!("{}", deprecated_function());
```
even with more levels of nesting, such as
```
println!("{}", foo!(bar!(deprecated_function())));
```
@pnkfelix I must admit I assumed they where correct (as that's what is used to align the `^~~~~` in the warning message).

The only situations where I encountered some that where not reliable was when dealing with compiler built-ins, that's pretty much why I skip them.

I couldn't find any other way to check whether an expression actually was from the macro arguments or was created by the macro. I couldn't find informations about macro expansion anywhere else.
If you know where I could look to seek more reliable data, I'd be glad to use it.