Improve the reusability of smart link page

As requested by @mkoistinen in #2785, I made the PageSmartLinkField and PageSmartLinkWidget more reusable.

Updated documentation will follow.