Add inline lint and multiple build types
Add more warnings
Lowercase C++ file names to make linter happy
Explicitly disable copy/assign instead of using boost::uncopyable
Mark classes as final