Make 'where' template function accepts dot chaining key argument

'where' template function used to accept only each element's struct
field name, method name and map key name as its second argument. This
extends it to accept dot chaining key like 'Params.foo.bar' as the
argument. It evaluates sub elements of each array elements and checks it
matches the third argument value.

Typical use case would be for filtering Pages by user defined front
matter value. For example, to filter pages which have 'Params.foo.bar'
and its value is 'baz', it is used like

    {{ range where .Data.Pages "Params.foo.bar" "baz" }}
        {{ .Content }}
    {{ end }}

It ignores all leading and trailing dots so it can also be used with
".Params.foo.bar"
Refactor tpl codes

- Use indirect function instead of the same code copies
- Fix missing arguments of some test codes
Add pagination support for sections and taxonomies

A new configuration property `paginate` is added with default value `0`. This setting will generate the site same as the current version.

Setting `paginate` to a positive value will split the list pages for sections and taxonomies into chunks of size of the `paginate` property.

`Data.Paginator` is provided as a template variable to help building a pager menu.

The pages are built on the form:

```
[SECTION/TAXONOMY]/index.html
[SECTION/TAXONOMY]/page/1/index.html => redirect to  [SECTION/TAXONOMY]/index.html
[SECTION/TAXONOMY]/page/2/index.html
....
```

Fixes #96