cmd/cue/cmd: make eval use output flags

Mostly for consistency sake.

An Eval Mode is added to filetypes to support this.

Retains the old behavior of eval as much as possible.
Few changes:
- The header is now printed to stderr before
  error messages
- The Encoder now prints headers using `//` for CUE.
  This ensures the output CUE is valid in case only a
  single schema is printed.

Also removes "final" as a tag option.

Change-Id: Ib89b80f4500615a7e3d56bd0f723ce0f20cf153c
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/5254
Reviewed-by: Marcel van Lohuizen <mpvl@golang.org>
diff --git a/internal/filetypes/filetypes.go b/internal/filetypes/filetypes.go
index 8e4269b..cad838c 100644
--- a/internal/filetypes/filetypes.go
+++ b/internal/filetypes/filetypes.go
@@ -34,12 +34,15 @@
 	Input Mode = iota // The default
 	Export
 	Def
+	Eval
 )
 
 func (m Mode) String() string {
 	switch m {
 	default:
 		return "input"
+	case Eval:
+		return "eval"
 	case Export:
 		return "export"
 	case Def: