Support range query for popover.

Update quote popover component to support range query (>>130-135)
by always building nodeList instead of assuming single node.
Changed assets path timestamp to file hash.

Since `brunch compile -o` would recompile all files all the time and
causing timestamp to change even if the file doesn't change. By using
file hash, cache will be expired only if file content actually changed.
Better way to detect event in quote popover.

Instead of evaluating window.addEventListener every time, this change
switch to use a feature checking ('addEventListener' in document) which
is a bit cleaner.
Make popover no longer dismiss if user try to mouse over it.

Using delay trick so when user could mouse over the popover. Once user
move mouse off the link target, the popup won't be dismissed until 100ms
later. If user mouse happens to enter the popover area during the delay
then the dismiss is cancelled.

Once user mouse enter the popover area, an event is added to the popover
to detect that user mouse has leave the popover area and dismiss the
popover accordingly.
Slightly more reliable way to remove popover.

The previous implementation require target.parentNode to be a direct
parent of popover in order to remove the popover. This cause popover
to be unremovable sometimes in situation where two popovers are
nested and user move his mouse out of *both* popovers. This change
fixes that by using parentNode of the popover node instead of
target.parentNode.

Additionally, this commit also allows recursive quote: previously
recursion wasn't working since we rely on cloneNode but that node
may already contains popover. In order to make it work, instead of
inserting cloned node into nodeList right away, we clean it up first
then push it to nodeList.

Some styling fix is also done, namely in "small desktop" layout
padding is no longer added to the side (due to container).