[clang][NFC] Remove `macro_begin` and `macro_end` from `Preprocessor` (#197817)

Use `macros()` wherever posible. This gives us the following advantages:

1. We can use the range-base for loop for simpler looking code.
2. We more ergonomically use algorithms.
3. We can avoid the duplicate work of checking if we need to call
`ExternalSource->ReadDefinedMacros()` that was in both `macro_begin` and
`macro_end`. In some cases, we save this extra work once per loop
iteration, not just one extra total.
4. No user confusion deciding which version they should call
5. Reduce the size of `Preprocessor.h` and the number of members in
`Preprocessor`.

Using `macros` ends up being the better solution in every case, so since
all callers were migrated from `macro_begin` and `macro_end` to
`macros`, get rid of `macro_begin` and `macro_end`.

---------

Co-authored-by: Victor Chernyakin <chernyakin.victor.j@outlook.com>
GitOrigin-RevId: 646edb0a1e7773a98aced7a0209b0cb4680f5648
3 files changed