Add unexported get! macro for Dicts

Same as get! function but does not evaluate the default
argument unless needed.
Faster cache lookup in broadcast! via get! macro

Change broadcast! cache to use nested Dict instead of a Dict with Tuple
keys; use get! macro to access its fields.
Related to #6041.

Also reduces code duplication in broadcast! definitions via eval macro.
Add a note of caution to get! macro
Merge pull request #6107 from JuliaLang/cb/fasterbroadcast

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