[sil] Add convenience APIs to SILBoxType for generics safe field access
Before this patch it was easy to try to work with the types in a SILBoxType by
accessing the layout of the SILBoxType... especially if one was working with
mutability since there wasn't any comment/APIs on SILBoxType that pointed one at
the appropriate API on SILType.
To make this easier to use and self document, I added some new helper APIs onto
SILBoxType that:
1. Let one grab the fields without touching the layout. The layout is an
internal detail of SILBoxType that shouldn't be touched unless it is necessary.
2. Get a specific properly specialized SILType of a SILType for a given
SILFunction.
3. Access the number of SILFIelds and also whether or not a specific SILField is
mutable.
4. Yields a transform range that transform the SILFields in the SILBoxType into
a range of properly specialized SILTypes.
This should prevent these sorts of mistakes from happening in the future.