Extend 'Array' and 'Array.DifferentiableView' for aggregate math and collection protocols. (#347)
Extend 'Array' and 'Array.DifferentiableView' for aggregate math and collection protocols. (#347)

Conform `Array` and `Array.DifferentiableView` to aggregate math protocols and collection protocols so that array derivatives can be handled by optimizers.

* Conform `Array` to `EleemntaryFunctions` where `Element` conforms.
* Conform `Array.DifferentiableView` to `EleemntaryFunctions` where `Element` conforms.
* Conform `Array.DifferentiableView` to `VectorProtocol` where `Element` conforms.
* Conform `Array.DifferentiableView` to `PointwiseMultiplicative` where `Element` conforms.
* Conform `Array.DifferentiableView` to `MutableCollection`, `RandomAccessCollection`, and `RangeReplaceableCollection`.

Some (if not all) of these belong to the standard library, but adding these to stdlib will cause IRGen to crash at the moment.

This unblocks building fast.ai notebooks against new optimizer implementations.
tensorflow/swift-apis,tensorflow/swift-apis,tensorflow/swift-apis,tensorflow/swift-apis,tensorflow/swift-apis