Add target contacts for volunteer projects

After chatting with @colemanw on IRC, we decided that, for now anyway, it was best to revert his recent UI work. We tentatively decided that the volunteer tab should function like the online registration (and other core) tabs, with a checkbox for activation and additional configurations revealed on check.

These changes add a field to the volunteer tab to allow the specification of a target or beneficiary of the volunteer project. The specified contact will appear as the target contact on activities associated with the project.

Please forgive the refactoring in the PR. I started this work -- ahem -- three months ago. Looking at it with fresh eyes this week I decided I could do some things more cleanly.

I *think* this PR is ready to be merged, but below is a list of caveats and additional work to follow.

Todos:
- [ ] I should run the suite of unit tests to make sure I didn't break anything.
- [ ] You should suggest unit tests for this new functionality and I'll (probably) write them. @mzd-xonflux, you wanna take a stab at this?
- [x] I haven't actually tested the install/upgrade processes yet, but I'll do so tomorrow.
- [x] On the volunteer tab, I would like for the new field to hide/show based on the status of the checkbox. This is no biggie; I just didn't prioritize it.
- [ ] You should suggest language changes/help text. @davecivicrm, I'm looking at you.
- [ ] Currently, if the target contact for the project is changed, existing activities are not affected, but new activities will reflect the target contact. Should changes work retroactively?