some C++11-fications and technical tweaks

:exclamation: Please apply this after PR #28 :exclamation: 

There are two main changes here:

1. using `std::shared_ptr` wherever possible instead of plain C pointers to harden the code and don't have to deal with lower-level memory allocation (no need for `new` or `delete` statements).
2. transforming `Controller::LevelIter` into a real std::iterator

I'm still a little unhappy with a few things. However, the aim of these changes is to move everything closer to stdlibc++ by using `std::algorithms`, `std::iterator` and alike.
I've use the pointer version to be consistent with the overloaded function signature above. We shouldn't mix the value type (reference vs. pointer) on overloaded functions. I would be fine with changing that (and some other functions as well) to use references instead of pointers.