Issue #27 - Throw IOException for a more abstract implementation
Issue #27 - Handle IOException from Swift component

* Cleanup exception handling in DataSyncService.
* Provide File paths instead of Input/Output Streams, to be handled
correctly by the Swift component (creation & closure).
Issue #27 - Make sure the dir exists before returning its path
Issue #27 - Log upload/download status