Add support for reading from stdin and empty input

- The user can specify stdin with "-f --"
- Previously, stdin was specified by the absence of a file (somewhat by
  accident, as the empty string just caused execute_process() to fail to
  open the file and use stdin instead).
- Now, absence of a file is interpretted as "no input", which is accomplished
  by creating a temporary empty file to use