abstract functionality of blog and bloglayout

for review by @acatton and @rockymeza 

I've never abstracted? abstracticized? models before, so let me know if you see anything off. This builds upon the recently merged pull request submitted by rocky.