Experimental: EnsembleArray as Network instead of Template

I kept noticing while working on the objects and contexts branch that I had to keep worrying about special case code for EnsembleArrays, which I disliked.  As people have said a few times, I think we thought at the beginning that we were going to have a bunch of Templates, but it has turned out that that isn't the case.  So it seems like it would be nice to eliminate this one-use special case from our code, if we can.

So that's what this is, an attempt to recreate the EnsembleArray functionality with just a normal Network.  I based it on an implementation from Terry's spa branch, and updated it to support all the ways that we use EnsembleArrays in the code base.

It passes all the unit tests and whatnot, so functionally it is equivalent.  The only real difference is the syntax for connecting to it; basically, you connect to it through ens.input and ens.output, as you do for all the other networks.

I left the SignalView stuff alone, but that would be the next step down this road.  I'm pretty sure the only place SignalViews were really used was in EnsembleArrays, so maybe we could eliminate all that.  I left it in though, because maybe it's still useful for optimizations on the backend?

I based this on the objects_and_contexts branch, but I thought I should make it a separate PR, since this could be accepted or rejected independently.  The commits specific to this branch are 947f1e8 and 948a960.