Novice module

This is an alternate version of PRs #428 and #521. Both those PRs had some branching issues. This PR fixes those issues by cherry-picking the commit from PR #521.

~~I'd like to wait until PR #485 is merged and reuse the more limited color set defined in that PR, as noted in my comments from PR #521.~~

Todo:
* ~~Remove `PixelGroup` class and change `Picture` to implement that behavior. Slices of `Picture` would return a new `Picture`.~~
* ~~Simplify `Picture` constructor:~~
   - ~~Maybe make `array` the only argument and allow the other variants using `from_path` and `from_size`.~~
   - ~~Maybe make `path` the only argument (+ `from_array` and `from_size` methods)~~
   - Maybe make `path` and `array` optional arguments, where one of the two are required.