In R/S/E I always give Surf to Linoone and the other HMs to whatever can learn them. I've started though, teaching only Surf and Fly and only raising 5 Pokémon and leaving the 6th slot free for whatever of the other HMs I need at the time.
Well I have a Wailmer and Tropius learn all 8 HMs in RS. The only real HMs I use in battle are Surf and sometimes Strength. Otherwise, they just rot in my TM Case.
I teach an HM slave for everthing except surf and fly, because they are actually quite good moves. In FRLG I used Paras as a slave, Linoone in RSE and Biidaru in Pearl.
I don't use HM Slaves often, so just about every Pokemon on my team has had a HM move at one point. I usually remove them after completing the game though, except for Surf.
I always teach one pokemon in my team 4 HM moves...and gives a nickname of "travel"...because I always bring that pokemon with me; like my gyarados(surf,dive,strength,waterfall) and linoone(forgot what the moves are)...hehehe