First crack at asynchronous concurrent reads and writes in the UG, with read-ahead bufferring.
* reads, writes, and truncates will fetch blocks in parallel.
* writes will write blocks in parallel.
* written data and metadata will be flushed to RGs and MS only on fsync() (now implemented in UG/sync.cpp)
* The last block read or written will be cached in RAM within the fs_entry structure, so subsequent reads and rights can be at least partially serviced without any I/O.  This will improve performance for small sequential I/O, such as with shell commands (i.e. where the I/O size is small relative to the block size).
* URL-generator refactoring, for a much cleaner interface.

The above is still being tested, so do not depend on it.
This should address issues #66 and #78.