Loading a model is now much nicer

Util::LoadObj just takes a file and returns a std::shared_ptr<Model>
which is fully setup with vbo/idx vbo along with materials. If loading
fails the shared_ptr will be nullptr.

I also need to come up with a better way for dealing with color/texture
models since wouldn't we need a whole different fragment shader if we're
not texturing?