text: Title: Mutually Exclusive Traits
  Body: #### The problem
  Traits are an awesome feature, but sometimes I build a factory where there are several traits that should never be used with each other. While I understand that it is an up to the user thing to make sure that people don't do something dumb with their factories and traits and documentation should be present to prevent people from using them incorrectly, a functional solution would also be great.
  
  #### Proposed solution
  Allow setting traits to False inside of each other. I believe this currently kind of exists, but if you set 2 different traits to false inside of each other, the execution of the factory throws an error indicating that there is a loop in the trait calls. I simply suggest an update to the logic of that check that can detect when a trait is negating another one instead of activating it, and allow that through, overriding whatever was placed on the actual factory call.
  
  #### Extra notes
  The traits are executed in alphabetical order as normal, and the value of a trait passed in as a kwarg on the factory call is overriden by the value from the other trait, for example the following factory setting the type of user to 'A' every time with the call made below because the admin trait is evaluated first and prevents the evaluation of the user trait.
  
  Sample factory
  ```
  class UserFactory(ModelFactory)
      type = factory.LazyAttribute(lambda: choice('A', 'U'))
  
      class Params:
          admin = factory.Trait(
              type='A',
              user=False
          )
          user = factory.Trait(
              type='U',
              admin=False
          )
  ```
  Sample call
  ```
  user = UserFactory(user=True, admin=True)
  user.type == 'A'
  ```