Make indexOf accept a cs as a template parameter

I was toying around with `indexOf`, as experiment for a future `Zip`.

This "consildates" the `indexOf` implementations into a template that accepts `cs` at compile time. The run-time version simply forward to that.

This makes the overall final programs faster, and include less object, since most of the time, we statically know which version we want anyways. So being able to provide for that is a good thing.

It's mostly just shuffling code arround. I didn't really change any implementations.