Possible problem with user types in parametrized types
This is related to the following comments:

https://github.com/kaitai-io/kaitai_struct/issues/71#issuecomment-366965959

I have a type with a parameter expecting a user type to be given from another importing type and according to @GreyCat this should be supported. My definition is like the following:

```yaml
params:
  - id:   oms_rec
    type: fmt_oms_rec
```

Which leads to the following exception if a user type is expected for `type` and compiles perfectly fine if `struct` or `any` is used instead. If `fmt_oms_rec` is imported or not doesn't make any difference.

	Exception in thread "main" io.kaitai.struct.precompile.ErrorInInput: fmt_oms_rec: /meta/imports/18: fmt_oms_rec (of class java.lang.String)
		at io.kaitai.struct.formats.JavaClassSpecs$.cached(JavaClassSpecs.scala:75)
		at io.kaitai.struct.formats.JavaClassSpecs.$anonfun$importRelative$1(JavaClassSpecs.scala:24)
		at scala.concurrent.Future$.$anonfun$apply$1(Future.scala:655)
		at scala.util.Success.$anonfun$map$1(Try.scala:251)
		at scala.util.Success.map(Try.scala:209)
		at scala.concurrent.Future.$anonfun$map$1(Future.scala:289)
		at scala.concurrent.impl.Promise.liftedTree1$1(Promise.scala:29)
		at scala.concurrent.impl.Promise.$anonfun$transform$1(Promise.scala:29)
		at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:60)
		at scala.concurrent.impl.ExecutionContextImpl$AdaptedForkJoinTask.exec(ExecutionContextImpl.scala:140)
		at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
		at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
		at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
		at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
	Caused by: scala.MatchError: fmt_oms_rec (of class java.lang.String)
		at io.kaitai.struct.datatype.DataType$.pureFromString(DataType.scala:350)
		at io.kaitai.struct.format.ParamDefSpec$.fromYaml(ParamDefSpec.scala:32)
		at io.kaitai.struct.format.ParamDefSpec$.fromYaml(ParamDefSpec.scala:19)
		at io.kaitai.struct.format.ClassSpec$.$anonfun$paramDefFromYaml$1(ClassSpec.scala:140)
		at scala.collection.immutable.List.map(List.scala:283)
		at io.kaitai.struct.format.ClassSpec$.paramDefFromYaml(ClassSpec.scala:139)
		at io.kaitai.struct.format.ClassSpec$.fromYaml(ClassSpec.scala:95)
		at io.kaitai.struct.format.ClassSpec$.fromYaml(ClassSpec.scala:224)
		at io.kaitai.struct.formats.JavaKSYParser$.fileNameToSpec(JavaKSYParser.scala:29)
		at io.kaitai.struct.formats.JavaClassSpecs.$anonfun$importRelative$3(JavaClassSpecs.scala:25)
		at io.kaitai.struct.formats.JavaClassSpecs$.cached(JavaClassSpecs.scala:71)
		... 13 more

Looking at the code, it seems to me that user types are not supported at all currently? I'm missing something like `ReUserTypeWithArgs` in other places of the file.

```scala
  def pureFromString(dto: Option[String]): DataType = {
    dto match {
      case None => CalcBytesType
      case Some(dt) => dt match {
        case "u1" => Int1Type(false)
        case "s1" => Int1Type(true)
        case RePureIntType(signStr, widthStr) =>
          IntMultiType(
            signStr match {
              case "s" => true
              case "u" => false
            },
            widthStr match {
              case "2" => Width2
              case "4" => Width4
              case "8" => Width8
            },
            None
          )
        case RePureFloatType(widthStr) =>
          FloatMultiType(
            widthStr match {
              case "4" => Width4
              case "8" => Width8
            },
            None
          )
        case "str" => CalcStrType
        case "bool" => CalcBooleanType
        case "struct" => KaitaiStructType
        case "io" => KaitaiStreamType
        case "any" => AnyType
      }
    }
  }
```