Faster cache lookup in `broadcast!` via nested Dicts and get! macro

See #6041. Uses nested Dicts instead of indexing with a Tuple. Ugly but effective. The commit also avoids some code duplication via `@eval` tricks.
My only concern with this is that is the introduction of the `@get!` macro for Dicts (not exported though); however, it is critical for the performance boost.
I'll merge if there are no objections.