Don't serve up assets without digests in development

If `config.assets.digest = true` and
`config.assets.raise_runtime_errors = true`, we only serve an asset if the request has a digest. This is to help users avoid hardcoding paths that work in development but break in production.

Here are the different cases:
- If the asset request has a digest and it matches the asset's digest, we
serve the asset.
- If the asset request has a digest and it does not match the asset's
  digest, we redirect to the asset.
- If the asset request does not have a digest, we raise a NoDigestError.

Fixes #117