Create a frozen indexable from a list while keeping possibly mutable elements safe.
This assumes that the list will never be changed.
It also takes care of mutable elements by copying them on each request, so the elements
in the returned indexable will never change.
T - element type of indexable/list
list - list to be wrapped by an indexable
elementCloner - function called for each requested element which returns a copy it
indexable based on list, which will return itself on frozen and will include
further optimizations for an unmodified list