Venezuela's government and opposition parties have agreed to postpone presidential elections by a month, to be held in May.