chain iterators inherit from std::iterator
adds basic chain test
makes scons build chain test
chain uses static_assert to check contained types

static_assert is triggered when iterator_deref isn't the same for all
containers.  I have added an are_same to iterbase to do the checking.
it's basically a variadic version of std::is_same.
tests chain with different container types
adds chain test with empty containers throughout
adds chain tests with only empty containers
better template meta programming for are_same