Better precompile: warn/error on usage of uninitialized struct
Compiler now is generally dumb and will not warn/raise error which one is doing something that is clearly impossible to achieve.

## Simple example: out of order usage

```yaml
seq:
  - id: body
    size: len_body
  - id: len_body
    type: u4
```

In this case, `len_body` will be available only after `body` is parsed, so current imperative code will fail due to `len_body` being uninitialized.

## More complicated example: circular reference

```yaml
seq:
  - id: header
    type: header
types:
  header:
    seq:
      - id: len_element
        type: u1
      - id: some_element
        type: element
  element:
    seq:
      - id: body
        size: _root.header.len_element
```

This actually seems relatively harmless, and it works in *some* implementations (i.e. JavaScript), but in reality, there is no guarantee that it will work in all (i.e. it currently fails in Python). The reason for that is we're using `_root.header` reference inside `header` parsing process, which is not guaranteed to exist, as it's implementation-dependent whether `header` will be partially available during its construction process, or it will be purely transactional ("all-or-nothing").