Here's a simple service class to perform manual Lead to Contact, Account, and Opportunity conversions with souped up built in duplicate checking! (You loose the SF dup checking by using a trigger to customize it, plus it doesn't do all of this as of now.)
public with sharing class LeadToContactTrigger {
private final List<Lead> leadList;
private final List<Contact> contList = [ SELECT Id, Name, firstname, lastname, Phone, Email, MailingPostalcode, MailingStreet FROM Contact ];
private LeadStatus convertStatus = [ SELECT Id, MasterLabel FROM LeadStatus WHERE IsConverted = true ];
private List<Database.LeadConvert> leadConverts = new List<Database.LeadConvert>();