Allow log_tags to accept a hash

Tagged loggers like ActiveSupport::TaggedLogger make logging both named and unnamed tags visible for better application debugging. Currently log_tags only supported an array of tags such as:

config.log_tags = [
->(request) { some_computed_value }

However as this list gets long it has two issues:

  1. Parsing JSON logs requires positional references (ie remote_ip will
    always be at some index)
  2. Some tags look similar and are hard to discern in a log message.
    For example a datadog trace id and epoch time look indistinguishable to a
    human reading those logs

I submitted as one solution