Pagination strategy behaviour
@type links() :: %{ first: String.t() | nil, last: String.t() | nil, next: String.t() | nil, prev: String.t() | nil }
@type options() :: Keyword.t()
@type page() :: map()
@type params() :: %{required(String.t()) => String.t()}
@callback paginate( data :: term(), view :: atom(), conn :: Plug.Conn.t(), page(), options() ) :: links()