Fix Json macro when passed case classes with a single custom generic field

Prior to this, a compile-time error would be thrown when trying to create a Json formatter for a case class with a single field that is of a custom type-parameterised type.

This change fixes that and simplifies some of the logic when trying to get unapplyTypes.
Unfortunately, this is still incorrect. The `TypeRef` might refer to a type alias, so we can't assume that `args` are the tuple element types:

```scala
scala> type IntTuple = Tuple2[Int, Int]
defined type alias IntTuple

scala> val t @ TypeRef(_, sym, args) = typeOf[IntTuple]
t: $r.intp.global.TypeRef = IntTuple
sym: $r.intp.global.Symbol = type IntTuple
args: List[$r.intp.global.Type] = List()

scala> val TypeRef(_, sym, args) = typeOf[IntTuple]
sym: $r.intp.global.Symbol = type IntTuple
args: List[$r.intp.global.Type] = List()

scala> t baseType definitions.TupleClass(2)
res2: $r.intp.global.Type = (Int, Int)

scala> args
res3: List[$r.intp.global.Type] = List()
```

Rather, we should take the type args of `t baseType TupleClass`

```scala
scala> (t baseType definitions.TupleClass(2)).typeArgs
res4: List[$r.intp.global.Type] = List(Int, Int)
```

It appears that this mistake is repeated elsewhere in the surrounding code.