What I dislike most about using HM slaves is that, since they're not very useful in terms of battling, in most cases, it feels as if I'm wasting party slots, which gives some sort of a sour-y feeling. If it weren't for that, it likely wouldn't have been an issue. Though, to get through games and whatnot, I'm still required to have at least one or two on my team; I suppose I'm able to spread these things among each and every of my members equally instead of having slaves and whatnot, but oftentimes, HMs ruin their overall move-set, which I don't wish to see happen.
Of all Pokémon that I've ever caught for HM-related purposes, I'd say my most favorite would have to be Biberal. Although it's quite average in terms of design (with its stats also being somewhat low), it's still able to learn a ton of HM moves, such as Surf, Rock Smash, Strength, and so forth. I feel that it was designed for them. Plus, Biberal is also quite easy to find, especially in fourth generation of games.
With all this said and done, I often wish that they would implement some feature to help us avoid need of slaving Pokémon for HMs. One idea I have is including two extra slots to each member of your party; moves that are put into these slots could only be used outside of battle, and not in. In our four default slots, however, things would be all normal.