This is a first draft of the smart list.
It passes all of the existing smartlist tests
(except for full-list reversal, whose behavior has changed),
but the rest of the code has not yet been updated.
Step one of refactoring - making SmartList into its own
package, with each class having its own file. No code
changes were made.
Note that SmartList and ListProxy import each other,
so had to import SmartList as a full package name
rather than use from ... import ... construct.