base: File API

Hmm, only if there are bugs in our ocde or someone is trying to read a file that really is constantly changing.

A user can break the loop via ```close()```.  Is that enough?

We can also put in some simply back-off logic, like waiting i*.01 seconds between tries, where i is the number of tries so far.