Macro joining Thrift structs.

There's a little term in fp literature that gets bandied about sometimes called "boolean blindness". See https://existentialtype.wordpress.com/2011/03/15/boolean-blindness/ for an example. The idea is that if you see an if expression of the following form:

```
if (condition(data)) {
  val a = repeatSomeConditionLogic(data)
  validWhenConditionTrue(a)
} else {
  val b = repeatSomeConditionLogic2(data)
  validWhenConditionFalse(b)
}
```

We can often use pattern matching to replace it with:
```
data match {
  case ConditionWouldHaveBeenTrue(a) => validWhenConditionTrue(a)
  case ConditionWouldHaveBeenFalse(b) => validWhenConditionFalse(b)
}
```

In this case, all that long winded explanation boils down to is doing the filter first and then working off the results of that.
```
val notThriftStructs = types.filter(!isThriftStructure(_))
if (notThriftStructs.nonEmpty) {
  // abort
}
```