Simplify main function

It also fixed a bug where if an array was passed, its reference was used
directly in building the mangler object, resulting in some methods
changing the original array.
Add support for multiple filters in .extract()

You can separate multiple filters with the pipe character in a single
string. You can also pass an array of filter strings. An object is
extracted if it matches any of them.
Add .toCase() utility function

The function tries to break an ID to words then put it back together
with a specific case style. It also accepts an array of words as well.
Add toCase option to .flatten()

Now you can use title case, camel case or the default underscore style
(with optional upper/lower casing) when flattening objects.
Add .remove() method
Avoid overprocessing in .toCase()

If there are underscores in the string, don't even try to find case
switching boundaries.
Minor: get rid of trailing whitespace