title: Pydantic: Validate discriminated union with literals
body: <p>I am trying to use <code>Literal</code> to create a discriminated union with Pydantic.
  There are events about a Job resource, and I want to distinguish them by <code>event_name</code>. For <code>JobPublishedEvents</code> I want to ensure, that some <code>extra_field</code> is present.</p>
  <pre class="lang-py prettyprint-override"><code>class GenericJobEvent(BaseModel):
      event_name: str
      id: int
  
  
  class JobPublishedEvent(GenericJobEvent):
      event_name: Literal['job.published']
      extra_field: str
  
  
  class Wrapper(BaseModel):
      wrapped: Union[JobPublishedEvent, GenericJobEvent]
  
  print(type(Wrapper(wrapped={'event_name': 'some.event', 'id': 1}).wrapped))  # GenericJobEvent
  print(type(Wrapper(wrapped={'event_name': 'job.published', 'id': 1, 'extra_field': 'extra'}).wrapped))  # JobPublishedEvent
  print(type(Wrapper(wrapped={'event_name': 'job.published', 'id': 1}).wrapped))  # GenericJobEvent
  </code></pre>
  <p>The first 2 cases behave as expected, for the third I would like a validation error since the literal matches, but the schema is not fulfilled. I get why the fallback to the GenericJobEvent is valid, though.</p>
  <p>Does anybody have an idea on how to achieve this?</p>