The exception should use the more efficient unordered_map (uses hashes for
constant time lookups)
Improved the exception class again. Now you can declare both base and
extended exception types with one macro, so the header is much less
verbose and it should be much more intuitive to declare your own
exceptions.