prevent directory traversals below _base_ (fixes #2):

- unify read and size into Fs_common
- introduce check_filename which uses realpath to ensure that requested name is below base
- guard all file system accesses with check_filename
Sure. `ocaml-crunch` doesn't care about FS blocking because it's not cooperative. The `PATH_MAX`/`MAXPATHLEN`/`resolved_path == NULL` stuff is more portability-oriented and is fairly annoying and hairy to get right. Depending on the support goals, it may not be important. The blocking is rather concerning, though...