Use absolute paths in CLI

  * Use absolute paths for source files and target paths
  * Memorize and explicitly check for watched directories
  * Make path comparison and construction more precise and clear
  * Remove now unnecessary check for special relative paths
Remove `path.exists*` as fallback for `fs.exists*`
Simplify `removeSource` and make it synchronous
Make timeout callback in `watchDir` synchronous
Simplify and rename `unwatchDir` (to `removeSourceDir`)
Fix and simplify management of `sources` in CLI

  * Move all source path filtering to `compilePath`
  * Restrict modification of `sources` to
    * `compilePath` for adding
    * `removeSource` for removing
  * Don't add unfiltered paths to `sources` (and remove them later on)
Merge pull request #3255 from marchaefner/CLI

CLI fixes and refactoring