added requestTimeout, and try/catch around JSON.parse

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