New Feature: Full host and protocol support

This is an alternative implementation of #131 which is more full featured.

### New Features:
* Adds support for specifying a default protocol in `default_url_options`.
* Adds support for specifying a default host in `default_url_options`.
* Adds support for specifying a default port in `default_url_options`.
* Adds support for routes which specify a specific protocol.
* Adds support for routes which specify a specific host.
* Adds support for routes which specify a specific port.
* Adds support for using the `window.location.protocol` when a protocol has not been specified.
* Adds support for using the `window.location.host` when a host has not been specified.
* Adds support for using the `window.location.port` when a port has not been specified.

### Changes:
* `generate_url_link` no longer validates that the `:url_links` config value contains a protocol.
* Changes expected value of `url_links` to boolean true/false and deprecates the previous usage. Default protocol, host, and port can be configured with `default_url_options`.

This PR fixes #127.
@le0pard Right. I understand. You want to be able to reference your Rails routes in your Node.js application. To be clear, this code will not break if you configure a default protocol, host, and port. I'm not sure what you would like me to do if these defaults aren't defined. Should I leave them blank? Should I `console.log` or raise an `alert`?

I can add checks to see if `window.location` is defined, otherwise return an empty string (same as *_path helpers). The result will look something like this:

```javascript
(typeof window !== 'undefined' && typeof window.location !== 'undefined' && window.location.protocol != '' ? window.location.protocol + '//' : '') + (typeof window !== 'undefined' && typeof window.location !== 'undefined' && window.location.hostname != '' ? window.location.hostname : '') + (typeof window !== 'undefined' && typeof window.location !== 'undefined' && window.location.port != '' ? ':' + window.location.port : '')
```

This seems unnecessarily complex to support this feature, while still trying to avoid unecessary concatenation and trying to keep it to one line. Rather than chaining all these ternary operators, and duplicating the "undefined" check, I can add additional JavaScript logic within the URL helper function to DRY up the code, but that will result in more lines. Personally, I feel that the code should be written to be clean and maintainable while supporting the 95% use-case. For the less common (5%) scenarios, the responsibility is on the developer to read the documentation and configure it properly.