Re-factor the API
 - remove side effect based Open and Close
 - Rely on readers and writers instead of io.File