for every single string in the program?
For every unique string, yes.
If you have Serial.print("I got here"); 27 places in your code, there will only be one copy of the string kept.
I wonder how my program hasn't run out of memory yet, I have stings all over the place
Well, stings don't take up as much space as strings.
if I try to use the F("stringHere") from the sticky in a function, I get this problem:
You need to overload your function, as the Print class has, to support the F() macro.
so what would be the most effective and easy way to get all my functions to use PROGMEM strings instead?
There was a clue above.