Refactored to use templates and allows vectors to be read from settings into a std::vector container

This pull request involves refactoring the code to use templates & specialisation, instead of overloads, which reduces code duplication, and allows easier changes to be made.

The switch to a template based system was chosen to allow reading of comma separated strings into a vector (which type is determined by the user). It also allows writing of vectors to the file.

(Now with only one commit!) :)
Ah! Ok I understand.
This seems a little unintuitiv to me though. If I pass a vector into a function I expect it to be filled only with data from that function and nothing that might have been in the vector beforehand.
I think I am gonna change that. Or do you have a good example where this might be useful?