Extra field API
Monero's extra field (tx extra) is a known pain point and something this lib has had issues with in the past (#123, #136, #184). 

Currently I don't like the API, its confusing and its possible to silently make invalid extra fields, e.g. by putting a variable padding field before another field. We have an `ExtraField::try_parse()` and a `RawExtraField::try_parse()` which have the same input (RawExtraField) but one silently truncates the extra field one returns the err.

I think we should remove  `ExtraField::try_parse()` and instead have  `RawExtraField::try_parse()` and  `RawExtraField::parse()`.
We should also make the subfields on ExtraField private and instead have an ExtraFieldBuilder that can create/ extend extra fields in a correct way. We will also need a getter on ExtraField for the subfields.

This way it will be harder for people to create bad extra fields and it will make the API easier to understand.

