This min is wrong. Why would be the amount of items to move depend on the size of right-most "hole"?

Indeed the following asserts during remove (Line 7254):
```
	import std.algorithm, std.range, std.stdio, std.typecons;
	int[] test = iota(0, 10).array;
	auto r5 = remove!(SwapStrategy.unstable)(test, tuple(1, 4), tuple(6, 7));
	assert(r5 == [0, 9, 8, 7, 4, 5]);
```
I suggest to add this test.

This line should be the intent given your >= condition tested above:
``` 
auto toMove = min(blackouts[left][1], range.length - (blackouts[right][0] +blackouts[right][1]));
```
Then it passes.