I've used n-i-n-j-a pinner (not sure why the dashes - just saw someone else doing it)... it is probably good for starting but I am having issues with it... one is it always seems to crash for me on any function other than follow... unfollow for example doesn't work so well. Also, it isn't multithreaded as far as I can tell, because if I want to be both following and unfollowing at the same time I have to run two instances of the program. Last but not least it doesn't work well with huge lists... Loading a 100k list of people into it is brutally painful, and loading the program each time with that is also painful... I don't know if there is anything else better though so I am stuck with it for now.
Great for starting, not so much when you want to do a little more complex things with it.