Stage 3: Support truncation/invalidation of dedup pages

This *should* work with any filesystem, AFAICS.

It includes an unfortunate kludge of adding an array of page indices
to struct pvec. The array is only populated if the page is a dedup
page and the caller requests it, but the space is unconditionally
allocated, which is obviously bad. A LIST would probably be more
appropriate, so that the overhead in the normal case is a single
additional pointer in the struct.