Add a prototype of vector like functions on 1D arrays

This commit adds the following methods to the _array record.  They currently
apply to 1D unstridable rectangular arrays only.  The methods that resize
the array assert at runtime that there is a 1:1 correspondence between the
array and its domain.

front() // return the first element of the array
back() // return the last element of the array
empty() // is the array empty?
push_back() // put a new value at the back of the array
pop_back() // remove a value from the back of the array
push_front() // put a new value at the front of the array
pop_front() // remove a value from the front of the array
insert() // insert a new value at a specified position and shift other elements

The methods that change the array size call reallocate every time instead of
doing something smarter like a doubling/halving scheme.

Added a test that does some pushes and pops on an array.
Added a test that tries to push_back an array declared over a domain has
multiple arrays.
Add a simple array vector operations benchmark

This shows the performance of array vector operations.  There is plenty of
room for improvement because every operation reallocates currently.  It
should work as a perf test.
Merge remote-tracking branch 'origin/master' into vectorArray
Change a config variable from param to const in test

Change a config param to config const so it can be set at runtime.
Merge remote-tracking branch 'origin/master' into vectorArray
Add array methods remove, reverse, clear and find for 1D rectangular arrays

Signatures of added methods:
proc remove(position: this._value.idxType) where chpl__isVectorSafe();
proc reverse(): where chpl__isVectorSafe();
proc clear() where chpl__isVectorSafe();
proc find(val: this._value.eltType): (bool, this._value.idxType);

Also added tests of these methods.
Add array methods to remove a range of elements and a position and count

Signatures of added methods:
proc remove(position: this._value.idxType, count: this._value.idxType) where chpl__isDense1DArray();
proc remove(positions: range(this._value.idxType, stridable=false)) where chpl__isDense1DArray();

Changed the chpl__isVectorSafe() helper method to chpl__isDense1DArray().

Added a new case to the arrayRemove test.
Rename a few methods and a formal argument name

Methods:
empty -> isEmpty
front -> head
back -> tail

Formal Argument:
position -> pos
Add array count method and fix clear to reuse the domain low bound

// returns the number of times 'val' occurs in the array
proc count(val: this._value.eltType): int;

Added a new test that uses count.

clear() now sets the domain to {low..low-1} instead of {1..0}.
Add comments describing the new array vector style methods

Add comments ahead of each of the new array vector style methods. Also, added
_array.idxType to match _array.eltType and switched from this._value.idxType
to this.idxType and from this._value.eltType to this.eltType.
Merge remote-tracking branch 'origin/master' into vectorArray
Change some doubled on statements into single on statements

Sung suggested combining these on statements, a good idea.
Change an expression that could involve communication into a known local one

Sung suggested this simplification to a conditional expression.
given: const hi = this.domain.hi - count;
       if pos+count > this.domain.hi then ... -> if pos > hi then ...
Serailize the array count method.

I originally implemented it using a parallel construct, but Sung pointed out
that it was the only parallel function in this set of list/vector functions
on arrays. Rewrite it as a for loop.
Rename one of the classes in the test timeVectorArray

Renamed the class SumReduce to SumElements.
Add a comment before list/vector methods on arrays

Add a comment about the list/vector methods describing what they are and what
limitations they have (not parallel safe, reallocate with every domain
modification).
Remove assertSingleArrayDomain in favor of chpl__assertSingleArrayDomain

Ben used assertSingleArrayDomain out of my branch in his set operations code,
then I renamed it with the leading "chpl__".  For a little while both existed
on my branch.
Merge pull request #346 from daviditen/vectorArray

Add list/vector style methods to 1D arrays that are 1:1 with their domains

Add the following methods to the _array type:
proc isEmpty(): bool;
proc head(): this._value.eltType;
proc tail(): this._value.eltType;
proc push_back(val: this._value.eltType) where chpl__isDense1DArray();
proc pop_back() where chpl__isDense1DArray();
proc push_front(val: this._value.eltType) where chpl__isDense1DArray();
proc pop_front() where chpl__isDense1DArray();
proc insert(pos: this._value.idxType, val: this._value.eltType)
where chpl__isDense1DArray();
proc remove(pos: this._value.idxType) where chpl__isDense1DArray();
proc remove(pos: range(this._value.idxType, stridable=false))
where chpl__isDense1DArray();
proc remove(pos: idxType, count: idxType) where chpl__isDense1DArray();
proc clear() where chpl__isDense1DArray();
proc find(val: this._value.eltType): (bool, this._value.idxType);
proc count(val: this._value.eltType): int;

All methods that modify the array's domain make sure the array is a 1D dense
rectangular array and that it has a 1:1 correspondence with its domain.

This incorporates feedback from @bradcray and @tmacd9.

Tested on full suite with standard linux64.

This is now updated to take review comments from @sungeunchoi into account.

TODO:
* Add tests for error cases
* Add versions of these methods for unsupported array types that call
  compilerError