Move contact join out of Articles Model into Plugin (3.x)

**ALL INSTALL CODE READY. THIS IS READY FOR TESTING AND USE.**

Moves the contact_table out of the Articles Model into a new plugin that fires on Content Prepare. The link and the contact id for the articles are determined in that plugin.

Benefits of this approach:
1. Content will never again be dropped when the article author's user id is not assigned to a contact. This has been a recurring problem.
2. Content will never be "duplicated" when the article author's user id is assigned to multiple contacts. This has been another recurring problem.
3. The same support for language filtering exists with this approach as is used today.
4. Avoids the newest problem introduced due to the increasing complexity of the SQL for SQL Server.
5. Prevents the additional query load incurred for those not using the feature (including any normal execution of the blog layout which never has included this link.)
6. Query slow down due to improper use of GROUP BY statements will not ever be re-introduced, even for only a few database types. GROUP BY is not a tool for fixing improper joins. (And, in fact, Mark Dexter found that it didn't fix the multiplicity issue.)
7. The feature to allow a contact to serve as the source of an author profile continues to be offered in a BC manner.
8. The feature is implemented in a flexible manner. Developers can offer their own author profile simply by turning off the core plugin and implementing their own which links to their author profile feature.