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: 
How is this usefully different to `SupportingItemMetaData` with `supporting` of None?