Have exactly what is asked for, no more no less, in my setup since ages:
(setq window-zoom-config nil)
(defun window-zoom()
"Zoom current window so it takes the whole frame.
The next time the function is called, the layout before
zoom is restored."
(interactive)
(if (eq nil window-zoom-config)
(progn
(setq window-zoom-config (current-window-configuration))
(delete-other-windows)
(message "Saved window configuration"))
(set-window-configuration window-zoom-config)
(setq window-zoom-config nil)
(message "Restored window configuration")))
Just bind your favorite key to window-zoom and off you go. You can even split again and create your own layout while in "zoom" for your temporary work, still the previous layout is restored when called again.