message: Make error type Clone
  Some OS specific error types in std::io and glutin are apparently
  allergic to being clone'd, but we can just Arc them.
diff: use std;
  use std::error::Error;
  use std::fmt;
  +use std::sync::Arc;
  use gfx;
  use glutin;
  @@ -16,7 +17,7 @@ use toml;
  use zip;
  /// An enum containing all kinds of game framework errors.
  -#[derive(Debug)]
  +#[derive(Debug, Clone)]
  pub enum GameError {
  /// An error in the filesystem layout
  FilesystemError(String),
  @@ -36,9 +37,9 @@ pub enum GameError {
  /// Something went wrong trying to set or get window properties.
  WindowError(String),
  /// Something went wrong trying to create a window
  - WindowCreationError(glutin::CreationError),
  + WindowCreationError(Arc<glutin::CreationError>),
  /// Something went wrong trying to read from a file
  - IOError(std::io::Error),
  + IOError(Arc<std::io::Error>),
  /// Something went wrong trying to load/render a font
  FontError(String),
  /// Something went wrong applying video settings.
  @@ -70,8 +71,8 @@ impl fmt::Display for GameError {
  impl Error for GameError {
  fn cause(&self) -> Option<&dyn Error> {
  match *self {
  - GameError::WindowCreationError(ref e) => Some(e),
  - GameError::IOError(ref e) => Some(e),
  + GameError::WindowCreationError(ref e) => Some(&**e),
  + GameError::IOError(ref e) => Some(&**e),
  GameError::ShaderProgramError(ref e) => Some(e),
  _ => None,
  }
  @@ -83,7 +84,7 @@ pub type GameResult<T = ()> = Result<T, GameError>;
  impl From<std::io::Error> for GameError {
  fn from(e: std::io::Error) -> GameError {
  - GameError::IOError(e)
  + GameError::IOError(Arc::new(e))
  }
  }
  @@ -206,7 +207,7 @@ impl From<winit::EventsLoopClosed> for GameError {
  impl From<glutin::CreationError> for GameError {
  fn from(s: glutin::CreationError) -> GameError {
  - GameError::WindowCreationError(s)
  + GameError::WindowCreationError(Arc::new(s))
  }
  }
  