Improve performance in search.js
Improve performance in search.js

* Don't call `Object.keys(index)` every search
* Use a dictionary to avoid duplications, instead of `filter` by `indexOf`
* For sorting, create a reverse-lookup table of the indices when we start, instead of using `indexOf` every time
* Don't use `match` for finding a substring: it creates a RegExp under the hood, leading to more GC; use `indexOf` (wrapped in a function `stringIncludes`) instead
* No reason to check for exact match and put it at the beginning if the query is empty
* Instead of concatenating strings to create HTML markup and use that to set `innerHTML`, create the elements directly (a lot more performant since it avoids concatenations and parsing, etc.) — so `createMarkup` is now `renderResults`
* Instead of matching of `evt.target.className` against `'js-search'` every `keydown`, just have a `isSearchInput` set on the `dataset` of `searchInput` when we start, so we can just examine `evt.target.dataset.isSearchInput`
muan/mojibar,muan/mojibar