In-app CSV upload of resources

Closes #126.

With this, you can upload a .CSV and indicate which items you want imported.  You can selectively add categories as needed and delete the .CSV afterwards. There's also some rudimentary duplicate detection - it'll do a case-insensitive match on the resource name.  When a duplicate is detected, the row will be highlighted in yellow and it won't be selected by default.

I had to rework a lot of the internals of the import process, but I think it's much more modular now.  I also had to rework the overall `db_fun` process - I think we had some weirdness with how the `lazy` parameter actually worked when we were creating/editing resources.  I also cleaned up parameter passing so it consistently passes around database sessions and consolidated the way we were assigning categories.
Keep in mind that you can't count on these been around. This folder will be empty every time we redeploy. It will be fine if you just want it for a one time import.