Implement the :named abbreviation mode for the SMT-LIB printer

This is a slightly updated patch by Peter Collingbourne (@pcc) that addresses issue #170. It teaches ```ExprSMTLIBPrinter``` to (optionally) use expression abbreviations using the SMTLIBv2 ```:named``` keyword. Since not every solver supports this annotation, the default is to use the ```let``` abbreviations where applicable making ```ExprSMLIBLetPrinter``` obsolete. Also, each constraint of the query is now printed as a separate ```(assert ...)``` statement enhancing readability.