Add strict types for the item metadata

We need to do this as the metadata is no longer just a `Map[String, String]`, but has structured content under 'supporting'.

The other option is a `Map[String, Any]` obviously but this is what I think of that :facepunch: 
Because the `SupportingItem` metadata will *never* have a `supporting` field.