Handle improperly passed args better

If they happen to not pass a hash as the last object, you'll run into a fatal error with `options == nil`, which will cause `options[:default]` to error out.

Not really a huge concern, since no valid params will have been passed, but eh...
what if we do this like `options = extract_options!(args)` and make `extract_options` a protected method.

I know that gets us closer to the active_support way of doing things but I don't want to add dependencies if I don't have to.