Create new formatting context dict instead of using self.__dict__

Using self.__dict__ is fine, but when its mutated it changes the
object's state. Creating a new dict avoids needing to think about
that, and doesn't introduce Python 3 issues (ie, where self.number is
accidentally set to '').
Fall back to the default PAGINATION PATTERNS when none specified.
Adding basic documentation for PAGINATION_PATTERNS.