Improved solution to issue #179 (invalid options throwing errors in joinRegExp)

This slightly more robust solution ignores options that are not strings
or regular expressions in the passed patterns array.

The prior solution still accepted non-string, non-regexp options (e.g.
[], {}, true, etc.).

Credit goes to @soundslocke for the fix.
Refactor towards a for loop and .push while removing redundant check

```unshift``` is significantly slower than ```push```. Shift towards
using ```push``` and remove a redundant conditional.
Cache the value of patterns.length outside the for loop

Likely
[benefits](http://stackoverflow.com/questions/6261953/do-modern-javascript-jiters-need-array-length-caching-in-loops)
the performance of older browsers that lack smart caching.

Thanks again to @soundslocke for the heads up.
Merge pull request #180 from johnbacon/patch-1

Improved solution to issue #179 (invalid options throwing errors in joinRegExp)