Use pattern_list and track_list typedefs.

While we are at it, std::make_shared does usually produce bettern
memory layout then an explicit new.
for (auto var : foo) performs implcit copying, thats really not what we want here.

And since I have a love for STL algorithms, use one: this is actually
an any_of check.