Remove RuntimeMemory.GetArrayElements()

This method copied every element in the array to a new array, so it increases memory consumption. Besides, it doesn't include values in the dictionary. 

This pull request remove this method and replace with ArrayUtils.GetValues() which is refactored as well to return  ``IEnumerable<StackValue>`` as in most cases we just iterate through elements.
UnMarshal<T> is used in CLRObjectMarshaler.ToICollection(), as IEnumerable is not an ICollection, it still needs to be cast to ICollection.