Can't combine output types for strings with different encodings
I need to parse null-termintated strings with conditional encoding utf16 or utf8
The strings are stored as Length + Value, with length negated for utf16.

If I use separate types with type switching wide_string (utf16) and narrow_string (utf8), when comparing strings, I'm forced to continually cast them to the same type.   I'm not sure I can do this when I compile to C#.

I've tried several approaches that avoid type switching and casting:

## ternary operators in encoding
``` yaml
  encoded_string:
    seq:
      - id: length
        type: s4
      - id: value
        type: strz
        size: is_wide ? length * -2 : length
        encoding: is_wide ? utf16 : utf8
    instances:
      is_wide:
        value: length < 0
```

error: The encoding label provided ... is invalid.
```
Call stack: undefined RangeError: Failed to construct 'TextDecoder': The encoding label provided ('is_wide ? utf8 : utf16') is invalid.
```
----------------------------------------------------------------------------------

## byte array with ternary to_s
``` yaml
  encoded_string:
    seq:
      - id: length
        type: s4
      - id: bytes
        size: is_wide ? length * -2 : length
    instances:
      is_wide:
        value: length < 0
      value:
        value: is_wide ? bytes.to_s(utf16) : bytes.to_s(utf8)
```

error: don't know how to call method 'identifier(to_s)'
```
RuntimeException: don't know how to call method 'identifier(to_s)' of object type 'BytesLimitType(IfExp(Name(identifier(is_wide)),BinOp(Name(identifier(length)),Mult,UnaryOp(Minus,IntNum(2))),Name(identifier(length))),None,false,None,None)'
```
I was surprised that field "bytes" was BytesLimitType and not a raw byte array.

----------------------------------------------------------------------------------

## conditional fields and a ternary instance value
``` yaml
  encoded_string:
    seq:
      - id: length
        type: s4
      - id: narrow
        type: strz
        size: length
        encoding: utf8
        if: is_wide == false
      - id: wide
        type: strz
        size: length * -2
        encoding: utf16
        if: is_wide
    instances:
      is_wide:
        value: length < 0
      value:
        value: (is_wide ? wide : narrow)
```

error: can't combine output types
```
    /types/encoded_string/instances/value/value: can't combine output types: StrFromBytesType(BytesLimitType(BinOp(Name(identifier(length)),Mult,UnaryOp(Minus,IntNum(2))),Some(0),false,None,None),utf16) vs StrFromBytesType(BytesLimitType(Name(identifier(length)),Some(0),false,None,None),utf8)
```
---------------------------------------------------------------------------------------

## This works but is hacky: Conditional fields and ternary instance, forcing string type using .reverse.reverse or .substring(0, length).

``` yaml
  encoded_string:
    seq:
      - id: length
        type: s4
      - id: narrow
        type: strz
        size: length
        encoding: utf8
        if: is_wide == false
      - id: wide
        type: strz
        size: length * -2
        encoding: utf16
        if: is_wide
    instances:
      is_wide:
        value: length < 0
      value:
        value: is_wide ? wide.substring(0, -length - 1) : narrow.substring(0, length - 1)
```

