anonymous event tracking slows down dbt runs when there is no internet connection
## Issue

### Issue description
dbt's anonymous event tracking will try to send events even when there is no internet connection. In these cases, each ping takes about a second to timeout, adding a meaningful amount of time to every run. This was actually the root cause of this issue: https://github.com/fishtown-analytics/dbt/issues/1002

dbt should either try to fire these events in a background thread, or stop trying to send pings if the first one fails. I think the former is preferable, as these shouldn't be blocking calls even if the pings are successful.

### Results
dbt blocked on sending anonymous events, whereas these events should not have measurably impacted the performance of a given dbt run.

### System information
0.11.x

The operating system you're running on:
This happened in a Docker container, though I imagine it would happen on any OS

### Steps to reproduce
Turn off your wifi and wait
diff --git a/core/dbt/tracking.py b/core/dbt/tracking.py
index af1d5b4a2..c9524bf85 100644
--- a/core/dbt/tracking.py
+++ b/core/dbt/tracking.py
@@ -7,6 +7,7 @@ from datetime import datetime
 import pytz
 import platform
 import uuid
+import requests
 import yaml
 import os
 
@@ -25,7 +26,35 @@ PACKAGE_INSTALL_SPEC = 'iglu:com.dbt/package_install/jsonschema/1-0-0'
 
 DBT_INVOCATION_ENV = 'DBT_INVOCATION_ENV'
 
-emitter = Emitter(COLLECTOR_URL, protocol=COLLECTOR_PROTOCOL, buffer_size=1)
+
+class TimeoutEmitter(Emitter):
+    def __init__(self):
+        super(TimeoutEmitter, self).__init__(COLLECTOR_URL,
+                                             protocol=COLLECTOR_PROTOCOL,
+                                             buffer_size=1,
+                                             on_failure=self.handle_failure)
+
+    @staticmethod
+    def handle_failure(num_ok, unsent):
+        # num_ok will always be 0, unsent will always be 1 entry long, because
+        # the buffer is length 1, so not much to talk about
+        logger.warning('Error sending message, disabling tracking')
+        do_not_track()
+
+    def http_get(self, payload):
+        sp_logger.info("Sending GET request to %s..." % self.endpoint)
+        sp_logger.debug("Payload: %s" % payload)
+        r = requests.get(self.endpoint, params=payload, timeout=2.0)
+
+        msg = "GET request finished with status code: " + str(r.status_code)
+        if self.is_good_status_code(r.status_code):
+            sp_logger.info(msg)
+        else:
+            sp_logger.warn(msg)
+        return r
+
+
+emitter = TimeoutEmitter()
 tracker = Tracker(emitter, namespace="cf", app_id="dbt")
 
 active_user = None
['core/dbt/tracking.py']