added requestTimeout, and try/catch in case Forecast.io returns something other than JSON (for instance, a “requests exceeded” message).