Issue title: Improve attached info for "argument not a subtype of parameter" error.
 Issue body: We had a user in IRC today show the following example:

```pony
use "collections"

type T is (String | F64 | None)

actor Main
  new create(env: Env) =>
    var structure: List[T] = List[T]()
    let str: String = "str"
    structure.append(str)
```

```
Error:
main.pony:9:22: argument not a subtype of parameter
    structure.append(str)
                     ^
    Info:
    packages/builtin/string.pony:512:24: U8 val is not a subtype of String val
      fun apply(i: USize): U8 ? =>
                           ^
    packages/builtin/string.pony:512:24: U8 val is not a subtype of F64 val
      fun apply(i: USize): U8 ? =>
                           ^
    packages/builtin/string.pony:512:24: U8 val is not a subtype of None val
      fun apply(i: USize): U8 ? =>
                           ^
    packages/builtin/string.pony:512:24: U8 val is not a subtype of any element of (String val | F64 val | None val)
      fun apply(i: USize): U8 ? =>
                           ^
    packages/builtin/string.pony:512:3: method result U8 val is not a subtype of (String val | F64 val | None val)
      fun apply(i: USize): U8 ? =>
      ^
    packages/builtin/string.pony:512:3: String val is not a subtype of ReadSeq[(String val | F64 val | None val)] box: method 'apply' has an incompatible signature
      fun apply(i: USize): U8 ? =>
      ^
    packages/builtin/string.pony:1518:19: U8 val is not a subtype of String val
      fun ref next(): U8 ? =>
                      ^
    packages/builtin/string.pony:1518:19: U8 val is not a subtype of F64 val
      fun ref next(): U8 ? =>
                      ^
    packages/builtin/string.pony:1518:19: U8 val is not a subtype of None val
      fun ref next(): U8 ? =>
                      ^
    packages/builtin/string.pony:1518:19: U8 val is not a subtype of any element of (String val | F64 val | None val)
      fun ref next(): U8 ? =>
                      ^
    packages/builtin/string.pony:1518:3: method result U8 val is not a subtype of (String val | F64 val | None val)
      fun ref next(): U8 ? =>
      ^
    packages/builtin/string.pony:1518:3: StringBytes ref^ is not a subtype of Iterator[(String val | F64 val | None val)] ref^: method 'next' has an incompatible signature
      fun ref next(): U8 ? =>
      ^
    packages/builtin/string.pony:1489:3: method result StringBytes ref^ is not a subtype of Iterator[(String val | F64 val | None val)] ref^
      fun values(): StringBytes^ =>
      ^
    packages/builtin/string.pony:1489:3: String val is not a subtype of ReadSeq[(String val | F64 val | None val)] box: method 'values' has an incompatible signature
      fun values(): StringBytes^ =>
      ^
    main.pony:8:14: String val is not a subtype of every element of (ReadSeq[(String val | F64 val | None val)] box & ReadElement[(String val^ | F64 val^ | None val^)] box)
        let str: String = "str"
                 ^
```

The error message is correct, but you have to read to the bottom of the info to understand what the expected parameter type was.

We want to add another two info lines to the top, saying something like:
- `argument type is [print argument type]` (pointing to the argument type in the source code)
- `parameter type is [print parameter type]` (pointing to the argument type in the source code)
 Comments: 
 Comment 0: Resolved by #2577.
{'source': 'GithubIssues', 'repo_name_with_owner': 'ponylang/ponyc', 'issue_id': 294022757, 'repo_stars': 4339.0}