This is so we have a bit of control over what implementation gets used where. I kinda like the split files, because the definitions are included and exposed to everything, but if the Array is actually used, then the implementation is included in the cpp file that needs it. I can't think of any specific metric that'd be measurable to sort of say "look, this is faster / better / etc", but I think that it's good practice, and we do similar things in the rest of the Core. Don't know if we want to change that practice or not, though.