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.

I did basic testing. For the following statements:
```
x = 0..1000000;
x[0] = null;
y = SomeNulls(x);
```
Dynamo consumes around 557MB private bytes before changing the return type to ``IEnumerable<StackValue>``, and the memory usage reduced to 459MB private bytes after change. 
You can do away with this for loop using values.Any(v => ContainsDoubleElement(v, core));