How can I contribute to the open source Bitcoin project? Generally speaking, how can:

A) A programmer contribute to Bitcoin?

B) A non-programmer contribute to Bitcoin?

Essentially; which areas are in most need of programming work / non-programming work?
As a Programmer

You can contribute by acquiring the bitcoin source code at github.  Fixing bugs, adding features and creating a "pull request".  Here are guidelines for creating pull requests.

Gavin Andresen, currently the lead developer of bitcoin, has suggested that testing is a bottleneck, so it would be helpful to compile the existing pull requests on github and test them.

It should be noted that it is possible to safely test bitcoin transactions without using real bitcoins by using the testnet (see the -testnet command line option).  You can even create your own self-contained testnet-in-a-box.

As a Non-Programmer

Learn more about bitcoin. Try using them. Learn proper ways to secure them. When you become better versed in bitcoin technology help by explaining it to others.  If you have a business, experiment with accepting bitcoin. If you are a customer, ask if a business accepts bitcoin. Help to dispel the myths and misunderstandings of bitcoin whenever you talk about them. However, be careful to get your facts straight.

If you have talents in other areas such as design, business, or blogging, etc. then look for ways to contribute using those skills. It has been suggested that the client needs better interface designs, businesses have expressed interest in advice on bitcoins, blogging can help address all the misinformation and rhetoric.

Everyone has something they could contribute, so give it a try.