Retain hinting for first font

Part of https://github.com/behdad/fonttools/issues/95
diff --git a/Lib/fontTools/merge.py b/Lib/fontTools/merge.py
index 12fdea5..c3ae1cc 100644
--- a/Lib/fontTools/merge.py
+++ b/Lib/fontTools/merge.py
@@ -132,16 +132,22 @@
 		m.log("Don't know how to merge '%s'." % self.tableTag)
 		return NotImplemented
 
-	return m.mergeObjects(self, self.mergeMap, tables)
+	logic = self.mergeMap
+
+	if isinstance(logic, dict):
+		return m.mergeObjects(self, self.mergeMap, tables)
+	else:
+		return logic(tables)
+
 
 ttLib.getTableClass('maxp').mergeMap = {
 	'*': max,
 	'tableTag': equal,
 	'tableVersion': equal,
 	'numGlyphs': sum,
-	'maxStorage': max, # FIXME: may need to be changed to sum
-	'maxFunctionDefs': sum,
-	'maxInstructionDefs': sum,
+	'maxStorage': first,
+	'maxFunctionDefs': first,
+	'maxInstructionDefs': first,
 	# TODO When we correctly merge hinting data, update these values:
 	# maxFunctionDefs, maxInstructionDefs, maxSizeOfInstructions
 }
@@ -312,20 +318,21 @@
 
 @_add_method(ttLib.getTableClass('glyf'))
 def merge(self, m, tables):
-	for table in tables:
+	for i,table in enumerate(tables):
 		for g in table.glyphs.values():
-			# Drop hints for now, since we don't remap
-			# functions / CVT values.
-			g.removeHinting()
+			if i:
+				# Drop hints for all but first font, since
+				# we don't map functions / CVT values.
+				g.removeHinting()
 			# Expand composite glyphs to load their
 			# composite glyph names.
 			if g.isComposite():
 				g.expand(table)
 	return DefaultTable.merge(self, m, tables)
 
-ttLib.getTableClass('prep').mergeMap = NotImplemented
-ttLib.getTableClass('fpgm').mergeMap = NotImplemented
-ttLib.getTableClass('cvt ').mergeMap = NotImplemented
+ttLib.getTableClass('prep').mergeMap = lambda self, lst: first(lst)
+ttLib.getTableClass('fpgm').mergeMap = lambda self, lst: first(lst)
+ttLib.getTableClass('cvt ').mergeMap = lambda self, lst: first(lst)
 
 @_add_method(ttLib.getTableClass('cmap'))
 def merge(self, m, tables):