only consider root values that are strings

We should treat 0/false the same way as null/undefined/NaN for the
`root` configuration which is prepended to module paths in a combo url.
remove unused `type` assignment
variable per line for better readability
reuse index variable instead of array variable
use a descriptive name for the sorted module array
keep `len` assignment local to the for-loop
remove unused variable assignments
use `comboBase` to store the comboBase

Now we don't need `comboSource`, `base`, and `j`, so we delete them.
move `comboSource` initialization to the top
use local module name over closure variable
use `comboMeta` to store combo metadata
check for inserted modules by module name
drop module early if it dne or has been inserted
remove `groupName` variable
merge first and second for-loops

The first loop clustered modules under the comboBase and the second loop
further clustered modules by type, as well as calculating some general
information about the combo url (e.g., combo separator and max url
length).
move encoding logic into one for-loop

Now we can finally pull this loop out into its own method.
move var declarations closer to their first uses

* Eliminated 1-char var names, except for `i`
* Removed the unused `resCombos` variable
[core] Add docs for the ES6 module system
Fix #1731: Y.Calendar.selectDates fails when passed the maximumDate with minutes/seconds

Fixing the issue explained in #1731, which causes selectDates to fail when the user passes the maximumDate with minutes or seconds to it. The calendar code is already resetting the hours part of the date's time, but this diff resets everything to make sure that date selection doesn't take the date's time into account anymore.
[DOM]: Strip trailing whitespace.