Add caffeine frontend

Yes, I know this is a huge diff - even without migration scripts. (I didn't want to add partially functioning junk to Liquid in a bunch of smaller/stacked diffs. Nonetheless, I apologize in advance.)

I've reviewed it several times, but I'd like it to get some fresh eyes before getting merged.

@CJS7070: [TODO] We need to either implement force-vend SSH capability, or remove it outright. We also need to decide on how soda images are going to work. Whether you want to do those in this diff or a separate one is totally your call since I see arguments for both sides.
That's the 'unvote' option. Perhaps this view should be called 'toggle_vote' instead.