Sachverhalt: A. Mit Verfügung vom 20. Dezember 2002 sprach die IV-Stelle des Kantons St. Gallen dem 1962 geborenen A._ ab 1. November 2001 eine halbe Rente der Invalidenversicherung zu. Unter Hinweis auf einen aktuellen Bericht seines Hausarztes Dr. med. M._ ersuchte A._ am 23. März 2004 um Überprüfung der Rente. Nach Abklärungen hob die IV-Stelle mit Verfügung vom 24. Januar 2006 die Rente revisionsweise auf Ende Februar 2006 auf mit der Begründung, der Gesundheitszustand des Versicherten habe sich verbessert und die Erzielung eines rentenausschliessenden Einkommens sei möglich. Mit Einspracheentscheid vom 16. August 2006 bestätigte die Verwaltung die Rentenaufhebung. B. Die Beschwerde des A._ wies das Versicherungsgericht des Kantons St. Gallen mit Entscheid vom 2. November 2007 ab. C. A._ lässt Beschwerde in öffentlich-rechtlichen Angelegenheiten führen mit dem Rechtsbegehren, der Entscheid vom 2. November 2007 sei aufzuheben und die Angelegenheit sei zu weiteren medizinischen Abklärungen an die IV-Stelle zurückzuweisen. Ferner lässt er um unentgeltliche Rechtspflege ersuchen. Die IV-Stelle beantragt die Abweisung der Beschwerde. Das kantonale Gericht und das Bundesamt für Sozialversicherungen verzichten auf eine Vernehmlassung. 