Add Budget Functionality.

This pull will add in all add budget functionality so far.  A lot of the changes are from the old AddBudget branch, but copied in outside to avoid potential conflicts with a newer version of master.  It also adds some attribution, but most of that will need to be added in a new pull request.