text: Title: Improve type checking experience using a type checker without a plugin
  Body: ## Problem
  
  <!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->
  
  For example, using `pyright` to type check would result in false positive errors that are annoying to fix when including 1-to-many relational fields.
  
  ```py
  user = await client.user.find_unique(where={'id': '1'}, include={'posts': True})
  assert user is not None
  for post in user.posts:
      ...
  ```
  ```
  error: Object of type "None" cannot be used as iterable value (reportOptionalIterable)
  ```
  
  This is a false positive as we are explicitly including `posts` they will never be `None`
  
  > NOTE: false positive due to our types, not a bug in pyright
  
  ## Suggested solution
  
  <!-- A clear and concise description of what you want to happen. -->
  
  1-to-many relational fields should not be typed as optional, instead they should default to an empty list, however we should still error if the field is accessed without explicit inclusion for supported type checkers.
  
  ```py
  class User(BaseModel):
      ...
     posts: List[Post] = Field(default_factory=list)
  ```
  
  Should be noted that we cannot do this for 1-to-1 relational fields.
  
  ## Alternatives
  
  <!-- A clear and concise description of any alternative solutions or features you've considered. -->
  
  The issue can be circumvented albeit using ugly / redundant methods
  
  ```py
  user = await client.user.find_unique(where={'id': '1'}, include={'posts': True})
  assert user is not None
  for post in cast(List[Post], user.posts):
      ...
  ```
  
  ```py
  user = await client.user.find_unique(where={'id': '1'}, include={'posts': True})
  assert user is not None
  assert user.posts is not None
  for post in user.posts:
      ...
  ```
  