Implement a downgrade & duplicate whitelist.

Ultimately, we hope to remove these lists (or significantly reduce them).
Merge pull request #481 from semenko/restrict-downgrade-and-dup

Implement downgrade & duplicate whitelists