For those on 10.7 or newer1, 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.
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 in failing to work on newer OSes.
As for monitoring per-application bandwidth usage, I recommend Rubbernet.2
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.
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.)