feat($multiple): support multiple selection & file count limits

This also reveals an array of valid files via the `files` property
and an `Object` containing arrays of `invalidFiles` keyed by reason.
Both of these are also passed to the change event handler.

closes #1