range request support

set `streamOpt.start` and `streamOpt.end` from Range header val.

* correct range, return 206 (e.g. `bytes=0-1`)
* invalid range, return 416 (e.g. `bytes=10-0`)
* from/last range-spec, return 206 (e.g. `bytes=10-` or `bytes=-10`)
* over range, return 206 with `bytes=0-#{stat.size - 1}`
* gzip always off on range-request
* not supported split range-spec (e.g. `bytes=0-1,-1` or `bytes=500-600,601-999`)