Make `Terminal` an actual `QObject`
Make `Terminal` emit a signal upon encoding change
Teach `File` how to change its encoding

If a `File` is in "text" mode, then it has an encoding.  This
encoding defaults to UTF-8; however, it can be set only at time of
construction (by using `fs.open`).

This modification allows the user to change the encoding on-the-fly
for "text" mode `File` instances.
Ensure std{in,out,err} encoding stays in sync with `Terminal`
Link with text codec plugins on mac and linux