Ephemeral models are shown as cancelled on KeyboardInterrupt
### Describe the bug
This is a minor UI bug - ephemeral models are shown as "cancelled" when a running dbt process is ctrl-c'd. I didn't dig so far into the implementation that I know exactly where this is coming from, but my instinct is that it has something to do with dbt "selecting" all ephemeral models for a run by default, a recent-ish performance improvement.

### Steps To Reproduce
1. Create an ephemeral model
```
{{ config(materialized='ephemeral') }}

select 1 as id
```

2. Create a slow table model
```
{{ config(materialized='table') }}

select 1 as id from pg_sleep(10)
```

3. `dbt run`
4. `ctrl-c` the running process.

Results:
```
14:50:59 | Concurrency: 8 threads (target='dev')
14:50:59 |
14:50:59 | 1 of 1 START table model test_schema.my_first_model............................ [RUN]
^C14:51:05 | CANCEL query model.debug.eph............................................. [CANCEL]
********* ^ this ephemeral should not be shown as cancelled ^ **********
14:51:05 | CANCEL query model.debug.my_first_model.................................. [CANCEL]
14:51:05 | 1 of 1 ERROR creating table model test_schema.my_first_model................... [ERROR in 5.30s]
```

**The output of `dbt --version`:**
```
v0.15.0
```
diff --git a/core/dbt/task/runnable.py b/core/dbt/task/runnable.py
index 0efb782a1..394d8f09a 100644
--- a/core/dbt/task/runnable.py
+++ b/core/dbt/task/runnable.py
@@ -242,6 +242,11 @@ class GraphRunnableTask(ManifestTask):
                 raise
 
             for conn_name in adapter.cancel_open_connections():
+                if self.manifest is not None:
+                    node = self.manifest.nodes.get(conn_name)
+                    if node is not None and node.is_ephemeral_model:
+                        continue
+                # if we don't have a manifest/don't have a node, print anyway.
                 dbt.ui.printer.print_cancel_line(conn_name)
 
             pool.join()
['core/dbt/task/runnable.py']