Extract an interface for terminal input/output

This is in preparation for an in-process CLI test
Add --vault option to specify a custom vault path
Use the .ws.agile.1Password.settings file to locate the keychain if it exists

Match the behavior of the official clients by using the
.ws.agile.1Password.settings file to determine the location of the
agilekeychain vault within Dropbox.

If that fails, fall back to
$DROPBOX_ROOT/1Password/1Password.agilekeychain which is the default
location. $DROPBOX_ROOT is set to '/' if using the Dropbox file system
or $HOME/Dropbox if using the local file system.
Add initial tests for command line interface

Add fake term IO implementation and use it in
CLI tests.