Patch with fix; I think it's ready.
The issue here was that we failed to make a fully deep clone of the
SegmentInfos that we pass to the NRT reader on init: it shared
SegmentInfo with IndexWriter's private SegmentInfos. This then meant
that we incRef'd one set of files on opening the reader, but then
decRef'd a different set of files when closing it, causing over-decRef
of the _N.si and _N_upgraded.si files.
It's "normally" safe to not deep-clone the SI because it "normally"
doesn't change after it's created, but in this one case (upgrading a
3.x SegmentInfo on commit), it does (we call SI.addFile(..)).
The fix was to make it an option to also clone the SI instances.
However, we can't do this always (whenever SIS.clone is invoked)
because in other places where we SIS.clone we rely on the SI not being
cloned (I added a separate test case showing this).