Derived Context::Scope from boost::noncopyable.

Because copying them makes no sense whatsoever.
Added GAFFERTEST_ASSERT macro.

This allows test failures on the C++ side to be reported to Python, rather than just exit as they did before.
Reimplemented Context storage using boost::flat_map.

This gives a pretty decent performance gain over the old CompoundData storage. The synthetic test in IECore.ContextTest.testManyContexts() shows ~40% reduction in runtime for copying a context with 20 entries (a fairly typical size), and ~45% reduction in runtime for a context with 200 entries. A less synthetic test involving an Instancer node with 10000 instances shows ~15% reduction in runtime.