Use ETag instead of Last-Modified header

Last-Modified doesn't always work properly, as some browsers will not consider a time change of less than 60 seconds worth refetching. Some opcode caches will also cache stat calls, causing invalid `filemtime` results. By using ETags, both of these issues can be avoided.