A ghost bucket stands in as a placeholder for a set of vlsns that are
unknown. This kind of bucket can only be present at the very beginning of
the vlsn range.
This fulfills an edge case that can arise when vlsns are inserted out of
order, and log cleaner truncation lops off the leading edge of the index.
For example, suppose vlsns were inserted in this order:
vlsnIndex.put(vlsn=2, lsn=1/2)
vlsnIndex.put(vlsn=1, lsn=1/0)
vlsnIndex.put(vlsn=3, lsn=1/3)
...
vlsnIndex.put(vlsn=5, lsn=2/9)
vlsnIndex.put(vlsn=4, lsn=2/0)
vlsnIndex.put(vlsn=6, lsn=2/10)
..
This results in an index that has two buckets. Bucket 1 = {vlsn 2,3} and
bucket 2 = {vlsn 5,6}. If we log clean file 1, we will truncate log at vlsn
3, and the new range will be vlsn 4-> vlsn 6. But the beginning and end of
each range needs to have a valid bucket, and there is no bucket to represent
vlsn 4. A GhostBucket is added to the head of the bucket set.