[4.1] URL detection interface

- Adds ability to overwrite default URL detection logic.
- Improves on the default URL detection and should fix #158
- Extracted some URL manipulation logic into `Facebook\Url\FacebookUrlManipulator` with plans to extract the URL manipulation stuff from `Facebook\Entities\FacebookRequest` so that it can be shared with the new pagination stuff (to come after this merge).
- Complete with documentation. :)
Just tested with the login page, Facebook simply override any provided parameter, but don't remove unused one.
e.g. a ``redirect_uri`` with a ``code``and ``error`` params, weird but possible, when user declined , it will change the ``error`` param value but keep the ``code`` one...

I think the login page should avoid those parameters in the ``redirect_uri`` param.
But I don't know what is the best way to do that, should we add a check in the SDK that throws an exception when they are present in ``redirect_uri``, or the login page should show an error.
I'm for the second option because I think this should be fixed at a Graph level.

@gfosco @SammyK thoughts?