Use a custom file reader service

This is a small refactoring introducing a custom FileReader service using a promise.

Before initialising, shouldn't we check if reading is already in progress? The init function creates a new Filereader each time readAsText is called, potentially leaving and old reader (who will still call callbacks)