Looks good. I have a couple of comments, which I will address in the commit if we agree on them:
1. The addition to DoubleArray interface should only be applied to the 3.0 branch
2. I am not sure we want/need the constructor, DescriptiveStatistics(ResizeableDoubleArray); the version just taking a double is probably sufficient and better from maintainability and API simplicity standpoint (in case we ever dump the current internal store).
3. I need to add some tests to confirm, but I don't think the expansion criteria newSize >= numElements + 1 is correct, unless you first force a contract(). Remember that there could be unused elements at the beginning of the array if "rolling" has occurred since the last contraction. I am also wondering whether you really need to mimic the behavior of expand() in this method. There is no invariant that says expansion needs to always happen in lumps as defined by the expansion mode. This machinery is there to eliminate the need to expand on every single value addition. Seems to me that we could just shove the new values to the end of the array and update numElements. Am I missing something?