Add ByteBufferCleaner, from Apache Lucene
Use ByteBufferCleaner to clean up file-descriptors on reader.close()
Use more explicit exception types