Allow functions to have "dynamic implementations", code that is generated during `Network.before_run` and has access to the `Group`.
Make use of dynamic function implementations for `TimedArray` in order to do upsampling based on the group's dt.
Add `Function.is_locally_constant` and query it in the linear state updater to allow locally constant functions of time (at the moment this means: `TimedArray` objects with an appropriate dt) in the "+b" part of "M*X + b".
Treat "locally constant" functions of t as constant over one timestep, i.e. allow them to make use of exact integration. This currently only applies to the use of `TimedArray` with an appropriate dt. Closes #210
If the user did not chose a specific integration method, the best integration method might not be known until runtime (functions are not necessarily known at creation time).