Add contracts to filters.

This enforces that we only have `And`s of `Or`s and not the other way around. This is the behavior of `-and` and `-or` so I thought it should be enforced. It also ensures that we dont have `TypeFilters` of `Univ` and `NotTypeFilters` of bottom.