improve code for filename completion (abstract the local filesystem impl...

The filename completion code relied on the representation of the local filesystem.  This has been abstracted.  Filename completion also starts off with the current directory.  Some code has been added to avoid duplicate buffers and to ask the user to discard changes, reread modified files, etc.