CollectionTrait - Use "splats". Split out "adders". Define interfaces.
In the prior commits, the signatures for `addScriptFile()`,
`addScriptUrl()`, etc are not strictly interoperable between
`CRM_Core_Resources` and `CollectionTrait`. This is because they use
key-value options instead of positional options. This makes it easier
disregard positional options that don't make sense (e.g. when calling
`CRM_Core_Region::addScriptFile()`, it's silly to reserve a positional
argument for the `$region` option).
The signatures *can* be unified by using "splats" (ie `...$options`) to
accept either key-value options or backward-compatible positional options.
The ultimate is hope is that:
* `CRM_Core_Resources`, `CRM_Core_Region`, and `CRM_Core_Bundle` all
implement the `CollectionAdderInterface`.
* `CRM_Core_Resources`, `CRM_Core_Region`, and `CRM_Core_Bundle` all
accept options in either format (key-value or positional).
* The positional format will fade-away.
The methods in CollectionTrait are newer terrain, so it's safer to change
those signatures, so we do that first.
Note that CollectionTrait formally builds on CollectionAdderTrait. This
ensures that IDE navigation to (eg) `CRM_Core_Region::add()` and
`CRM_Core_Resources_Bundle::add()` works as expected.