Use send_file/5 instead of byte reading through the VM

Changes to using the native [:send_file/5](http://www.erlang.org/doc/man/file.html#sendfile-5) support. This is dependent on the transport layer implementing the function, in this case Ranch does support this.

I have updated Plug to support this new layer with backwards compatibility.