Rewrote the factoid model functions into a proper object-oriented Factoids::ProviderModel. Feature complete and tested to work.