* in prepartation for speed optimizations:
- prepare for & use custom allocators from boost
- use flat_map/flat_set instead of std::map/std::set
typedef all of it so that allocators and containers
can be relatively easly switched from one type to the other