Updated TR1 code to C++11
Changed forward declarations from 'class' to 'struct'
Fixed improper usage of iterater while erasing an element in a map

The iterator was being incremented as part of the for loop after it had been
erased. The erase method invalidates the iterator making the increment fail in
VS2012 Express Edition. The increment apparently worked using g++ 4.8.1.

The post-increment now being performed in the call to erase works because the
standard explicitly states that the increment must be completed before the call
to erase is executed.
Removed a static initialization order dependency at C runtime startup

In Consumer.cpp there is a ConsumerAO object defined in an anonymous namespace.
When the ConsumerAO object gets initialized, it uses the TypeID::id() method
which returns a static unsigned int that is initialized using another
static-scoped unsigned int in the TypeIDGenerator.

Depending on how the code was compiled and linked, the ConsumerAO object and the
static unsigned ints in TypeID and TypeIDGenerator got initialized in the
correct order only sometimes. Since the order of static variable initialization
is undefined it was necessary to remove the order dependency at runtime startup.

The order dependecy was addressed by moving the static variables from class or
file scope (via anonymous namespace) to method scope. This was possible because
only one method ever needed access to each variable. This moved the
initialization from being determined by the complier/linker to being determined
by when each method was called for the first time - which guarentees the correct
initialization order.