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.