file: initial async "file:" protocol

Squashed commit of the following:

commit 16893c9211fa1b51413caef91e08c1d34db737ff
Author: Bent Cardan <bent@shakelaw.com>
Date:   Sat Jan 11 10:13:16 2014 -0500

    better error message

commit 3894f7982354375e37be5fdc1d39ce71f828a36e
Author: Bent Cardan <bent@shakelaw.com>
Date:   Sat Jan 11 10:09:51 2014 -0500

    update file protocol to return as callback

Closes #4.