Validate settings in with-options

1.  Validate `*settings*` in `with-options`.
  * must be a map
  * mode must be either `:production` or `:development`
  * when mode is production
      * server-root must be a string (representing a path)
      * precompiles must be a sequential collection of strings
  * assets-root must be a sequential collection of strings
  * manifest-file must be a string (representing a path)
2.  Make options being passed into core functions optional (rely on validation to complain if something is missing.
3.  Create and use a temporary directory for asset-root in development

EDIT: Change PR to do more things