RF: Builder components in prep for localization work

- main aim: separate display values (hints, labels) from logic/function
  use _localized dict: keys=for logic, values=for display
- consistently inherit from BaseVisual (or VisualComponent, KeyboardComponent)
- move start/stop into BaseVisual
- remove some duplicated code
- a couple small bug-fixes along the way
- standardize hint messages
- make a migration-assist tool (x.py) to compare all param attribs, hints, etc before vs after refactoring
  (could become part of the standard test-suite with minor work)
DOC: dev notes on making a builder component

- add utf8 encoding to x.py for printing
RF: use panels in Params dialogs to fit vertically on small screens
RF: param-ctrl panels fall-through categ name is not localized
TEST: check builder component param attribs against a known profile
- check all attribs of all components
- ignore display-only (hint, label)
- ignore order (display order within the Param dialog)
- test fails if any differences found

use x.py --out to generate a new profile (redirect output to a file, set var `profile` to the filename)
FF: fix to avoid merge conflict
Merge branch 'rf-builder-components' into feature-localization

* rf-builder-components:
  FF: fix to avoid merge conflict
  TEST: check builder component param attribs against a known profile - check all attribs of all components - ignore display-only (hint, label) - ignore order (display order within the Param dialog) - test fails if any differences found
  RF: param-ctrl panels fall-through categ name is not localized
  RF: use panels in Params dialogs to fit vertically on small screens
  DOC: dev notes on making a builder component
  RF: Builder components in prep for localization work

Conflicts:
	psychopy/app/builder/components/image.py  -- very minor: use correct var 'interpolate' (not mask)