How to make pages slug have priority over any category

You can hook onto parse_request and trick WordPress into thinking it matched a page permalink if one exists with the same slug for a category term:

/**
 * Override query for pages that match a category slug.
 * 
 * @param   WP  $wp
 */ 
function wpse_177014_category_to_page ( $wp ) {
    if ( ! empty( $wp->query_vars['category_name'] ) && get_page_by_path( $slug = $wp->query_vars['category_name'] ) ) {
        if ( ! empty( $wp->query_vars['paged'] ) )
            $page = $wp->query_vars['paged'];
        else
            $page="";

        $wp->matched_query = "pagename=$slug&page=$page";
        $wp->query_vars    = array(
            'pagename' => $slug,
            'page'     => $page,    
        );      
    }
}

add_action( 'parse_request', 'wpse_177014_category_to_page' );