Use codegeneration for monitors

`StateMonitor` and `SpikeMonitor` are now using code generation, I also added a very simple (no binning, no smoothing) `PopulationRateMonitor`. The solution is not perfect because it requires quite a bit of hand-written code in the template, which leads to some issues around types: We have to make some assumptions about the data type (currently it assumes double) and therefore recording a boolean variable will for example fail (with a nasty memory corruption error in C++...). We have this issue in several templates therefore we should find a viable solution for it. For example, C++ could pass the type information for every variable in the specifiers as a `_type_varname` argument to the template?

I guess we should do this in a separate pull request, though.

Closes #77.