Bugfix/set public (#605)

Make `Handler::File->public_dir` a lazy attribute with a builder. This allows public path to be updated via set before Handler::File is registered. (It was previously was being set in the BUILD method, which is not best practice.)

`send_file` was also updated to _not_ set the `public_dir` for non-system paths. The new builder for this attribute looks after that case.

Resolves #605.