[Enchantments] Named/Random Affix Separation

- Introduced an IRandom interface so that I can control Randoms inside of my tests... Probably a better design to use an interface for it anyway (as... proven out of necessity here).
- Separated out random enchantment generation and named prefix/suffix enchantment generation.
-- They leverage an abstract base class for some common functionality.
-- Each was performing a different job, so it made sense to treat them differently.
- Created unit tests around the newly separated interfaces+classes.
- Added a system for mapping a magic type ID to a number of affixes we expect.
-- See the previous commit for more detail on why this is useful.
-- Items of magic type A an be spawned with B to C number of enchantments
-- Items of magic type X an be spawned with Y to Z number of enchantments
- Updated the schema to have a table that would be pulled from for this information.