Quite a few changes; mainly cosmetic and a bug-fix, keep reading.

Rearranged forward-declarations of functions according to their
importance.

Introduced parseSaveFileName(), which replaces sscanf() calls and its
surrounding code.

Eliminated memory leak of getDatabseSaveFileName().

Fix error codes and messsages of many ereport() calls.

Don't create buffer-readers if GUC hibernate.enabled is not set.

Honor the GUC hibernate.enabled setting just before saving buffers.

Rename Worker process to 'Block Reader'.

Break up the BlockReaderMain() function and created a separate
ReadBlocks(). This is now similar to the BufferSaverMain()/SaveBuffers()
pair.

Honor the SIGTERM signal in BlockReader, and exit ASAP.

Use correct condition (blocknum >= nblocks) to avoid referring to block
one past the end.

Use ReadBufferExtended() to read the buffers into shared-buffers.

Use correct expression to start the range processing, and avoid extra
block read call.

Remove the save-files after we're done with them.

Fix a bug in SPI processing, so that we return InvalidOid if no rows
were returned by the query.