pw_watch: Single log window fullscreen UI

Full screen pw_watch user interface that provides a single log window
with pw_watch messages and ninja output. Build status, Ninja build
steps, and error counts are shown in a 1 line toolbar at the top.

Tab and Shift-Tab are bound to jump to the next and previous Ninja
build failure. Additionally, output will stop on the first failure.

Bug fixes:

- pw_log.install FileHandler was not setting utf-8 encoding.

- pw_watch build directories were not added to the exclude_list.
  This caused out directories with names other than `out` to not
  rebuild.

- pw_watch --no-restart option wasn't functioning. Added a check
  plus additional log message saying if a build will be triggered
  whenever files change.

Other Changes:

- pw_cli.branding.banner() changed to color each line individually
  instead of only at the beginning of the banner text. Before this
  change an extra line was invisibly being added to the end of the
  banner due to appending the clear color ansi escape sequence. To
  preserve the line spacing presentation an extra_text arg was added
  defaulting to `\n`.

- Default ansi color theme for console and pw_watch --fullscreen. This
  will use ansi color codes only for themeing.

- Rename --watch-app flag to --fullscreen

- Remove **vars(args) calls in watch.py. This was making debugging
  harder as it is less obvious what gets passed to watch_setup().

- New flag --no-banners to hide large Pass/Fail ASCII art.

Change-Id: I9167e5f69e270ff2b717f812651c7ac416ad74b8
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/81983
Reviewed-by: Rob Mohr <mohrr@google.com>
Reviewed-by: Wyatt Hepler <hepler@google.com>
Commit-Queue: Anthony DiGirolamo <tonymd@google.com>
diff --git a/.gitignore b/.gitignore
index b914aa0..7a095bc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,11 +10,16 @@
 .project
 .cproject
 .vscode
+# Clangd directories
 .clangd/
+/.cache/clangd/
+# Vim
 *.swp
 *.swo
+# Emacs
 *flycheck_*
 *_flymake.*
+.#*
 
 # Python
 *.pyc