My stock music app will do it. (Shouldn't we all have the same one?)
Play a song, hit the menu button and select "set as". Then you can set that song as your phone ringtone or set it to a specific caller.
Also Fusion is a good free music player that allows you to use a certain part of a song as a ringtone. Great for songs that start off slowly.