[SMA-26] Ensure that readers and stream are closed

Failing to close a FileReader or FileInputStream causes problems on
Windows when the time comes to delete the file. To ensure that
the InputStreams and Readers are closed this commit updates
FileSystemEntry to provide access to its InputStream or Reader via a
callback mechanism rather than providing direct access via getter
methods. This means that the FileSystemEntry implementation is
responsible for closing the InputStream or Reader rather than
each user of FileSystemEntry having to do so.
Merge branch 'SMA-26'