Reduce function calls in creation of Item classes

With heavy use of Stash creation of Item classes & setKey shows up
in profile data, so the change tries to reduce function calls in these.

Suggested followup is executeGet().
Note: Might need another pass on this tomorrow for CS / tests if this is otherwise accepted.
Note2: Contains interface change on Item to force array type on $key, felt like a easy way to avoid having to check.
note: given the doc, this being protected and only being called from one place it seemed natural to move it into setKey, but might be doc is wrong and it is meant for subclassing Item class, however that is still not main focus of this class.