First version of the scheduling and disk space reservation for compaction.
Fixed bugs in compaction.

- Fixed bug in the fileid_end: files that were not part of the
  compaction ended up being deleted by mistake, creating inconsistencies
  between the index and actual data on secondary storage, making the
  program crash.
- Made sure that fileid_end_expected for the compation is never higher
  than the unfinished files (the files that still have incoming data).
Fixed resetting of fileid sequence for compacted files.
Fixed bugs in compaction.

- Added new Reset() method in the resource manager, so that all
  attributes can be reset before each compaction process. This wasn't
  done, and compactions would still carry the data of the previous ones
  and introduce mistakes in the index.
- Added calls to ftruncate() so that the files would be truncated to the
  right sizes after compaction, and get rid of all non-needed space left
  by the pre-allocation.
Fixed bug in checksum computation during compaction.

During compaction the crc32 of an entry was copied from
the uncompacted version of the entry, which contains information
about the header. As compaction changes the header, this crc32
is incorrect. The crc32 is now recomputed using the key and value,
in order to produce the correct value when the entry is later
persisted to secondary storage.
Added timeout for files with incoming multi-chunk entries.

Added timeout for files with incoming updates that no longer get updates
(a 60-second timeout) -- without it, the compaction process would
block as the highest stable file id would never change in case a
client timed out and was blocking a file.