FIX dictionary behaviour
msg_group_tag() :: String.t | nil
subject_tag() :: String.t | {String.t, String.t} | nil
tag_info() :: {tag_name :: String.t, tag_type :: tag_type}
tag_type() :: :string | :datetime | :number | :boolean
group_by_tag(msg_type :: String.t) :: msg_group_tag
subject(msg_type :: String.t) :: subject_tag
tag_info(tag :: String.t) :: tag_info