Generated Java fails to initalize ArrayList with type-switching and size together
I discovered this after applying the workaround mentioned in #204, so you may want to read that first, but I believe this is a separate bug.

With this slightly-more-complicated structure:

```yaml
meta:
  id: foo
  endian: be
  ks-debug: true
seq:
- id: code
  type: u1
- id: size
  type: u4
- id: data
  repeat: expr
  repeat-expr: 1
  size: size
  type:
    switch-on: code
    cases:
      1: one
      2: two
types:
  one:
    seq:
      - id: first
        size-eos: true
  two:
    seq:
      - id: second
        size-eos: true
```

Kaitai generates code like this:

```java
public class Foo extends KaitaiStruct {
    // ...
    public void _read() {
        _attrStart.put("code", this._io.pos());
        this.code = this._io.readU1();
        _attrEnd.put("code", this._io.pos());
        _attrStart.put("size", this._io.pos());
        this.size = this._io.readU4be();
        _attrEnd.put("size", this._io.pos());
        _attrStart.put("data", this._io.pos());
        // _raw_data should be initialized here <========================
        data = new ArrayList<Object>((int) (1));
        for (int i = 0; i < 1; i++) {
            {
                ArrayList<Integer> _posList = _arrStart.get("data");
                if (_posList == null) {
                    _posList = new ArrayList<Integer>();
                    _arrStart.put("data", _posList);
                }
                _posList.add(this._io.pos());
            }
            switch (code()) {
            case 1: {
                {
                    ArrayList<Integer> _posList = _arrStart.get("data");
                    if (_posList == null) {
                        _posList = new ArrayList<Integer>();
                        _arrStart.put("data", _posList);
                    }
                    _posList.add(this._io.pos());
                }
                // NullPointerException on the next line <========================
                this._raw_data.add(this._io.readBytes(size()));
                KaitaiStream _io__raw_data = new ByteBufferKaitaiStream(_raw_data.get(_raw_data.size() - 1));
                One _t_data = new One(_io__raw_data, this, _root);
                _t_data._read();
                this.data.add(_t_data);
                {
                    ArrayList<Integer> _posList = _arrEnd.get("data");
                    if (_posList == null) {
                        _posList = new ArrayList<Integer>();
                        _arrEnd.put("data", _posList);
                    }
                    _posList.add(this._io.pos());
                }
                break;
            }
            case 2: {
                {
                    ArrayList<Integer> _posList = _arrStart.get("data");
                    if (_posList == null) {
                        _posList = new ArrayList<Integer>();
                        _arrStart.put("data", _posList);
                    }
                    _posList.add(this._io.pos());
                }
                this._raw_data.add(this._io.readBytes(size()));
                KaitaiStream _io__raw_data = new ByteBufferKaitaiStream(_raw_data.get(_raw_data.size() - 1));
                Two _t_data = new Two(_io__raw_data, this, _root);
                _t_data._read();
                this.data.add(_t_data);
                {
                    ArrayList<Integer> _posList = _arrEnd.get("data");
                    if (_posList == null) {
                        _posList = new ArrayList<Integer>();
                        _arrEnd.put("data", _posList);
                    }
                    _posList.add(this._io.pos());
                }
                break;
            }
            default: {
                {
                    ArrayList<Integer> _posList = _arrStart.get("data");
                    if (_posList == null) {
                        _posList = new ArrayList<Integer>();
                        _arrStart.put("data", _posList);
                    }
                    _posList.add(this._io.pos());
                }
                this.data.add(this._io.readBytes(size()));
                {
                    ArrayList<Integer> _posList = _arrEnd.get("data");
                    if (_posList == null) {
                        _posList = new ArrayList<Integer>();
                        _arrEnd.put("data", _posList);
                    }
                    _posList.add(this._io.pos());
                }
                break;
            }
            }
            {
                ArrayList<Integer> _posList = _arrEnd.get("data");
                if (_posList == null) {
                    _posList = new ArrayList<Integer>();
                    _arrEnd.put("data", _posList);
                }
                _posList.add(this._io.pos());
            }
        }
        _attrEnd.put("data", this._io.pos());
    }
    // ...
    private ArrayList<Object> data;
    private ArrayList<byte[]> _raw_data;
    // ...
}
```

This causes a `NullPointerException` because the `_raw_data` array is never initialized. I've looked around a little bit, but haven't found an obvious flaw or workaround. I'll sleep on this tonight and think about it more tomorrow.