Improve the reusability of smart link page

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