Add container base class

This pull request has three main parts:

1. Move the neo core tests to their own folder.  When doing refactoring, this will make it easier to run the quicker core tests on their own.

2. Improve fake_neo and port the container classes to use it for unit tests.

3. Create a container base class.  This implements almost all of the container functionality.  The container classes derive from it.  This simplifies the code considerably, makes the classes more consistent, and makes improvements automatically apply to all container classes.