For those on 10.7 or newer, the easiest solution to the bandwidth limiting part of the question is Apple's Network Link Conditioner (NLC), a free utility that was originally included with Xcode. Then Apple got all sandbox-happy, so now it's a separate download from Apple's developer web site, called the Hardware IO Tools for Xcode.
If you're still on 10.6 or older, you can get the same effect from the command line by adding a limited-bandwidth pipe to the firewall.
The important points going for NLC are that it's from Apple, it's got a very straightforward UI, and it works. Some of the other suggestions given in other answers fail some or all of these criteria, particularly on Mountain Lion. The
ipfw fall-back fails the "straightforward" criterion, but it does still succeed on the other two.
As for monitoring per-application bandwidth usage, I recommend Rubbernet. I just tested it on Mountain Lion...it still works. :)
Beware that if you're using the App Store version of Rubbernet, you also need to install a daemon to do the monitoring. (Another end-around the sandbox mess, I'm afraid.)