Prepare blocks by separate function, benchmark it
Preallocate slices

	benchmark                  old ns/op     new ns/op     delta
	BenchmarkPrepareBlocks     756329        368914        -51.22%

	benchmark                  old allocs     new allocs     delta
	BenchmarkPrepareBlocks     610            152            -75.08%

	benchmark                  old bytes     new bytes     delta
	BenchmarkPrepareBlocks     575088        311472        -45.84%
Automatically generate unicode block range map

Data is taken from http://www.unicode.org/Public/UNIDATA/Blocks.txt, use
`gen_blocks.go` script or run `go generate` to update
`blocks_generated.go` file.
Use MustCompile instead of ignoring error