Updates to ShaderProgram class

- Successful reloading delete previous shaders and program objects
- Throws an error if first load fails
- Writes to cerr if non-first load fails, and falls back to previously loaded
  program.