func (s *Stack) Push(value interface{}) *Stack {
	if s == nil {
		s = &Stack{}
	}
	return &Stack{
		top:    value,
		bottom: s,
	}
}
Push places an item onto the top of the stack.

Complexity: O(1) worst-case
package immutable
type Stack struct {
	top    interface{}
	bottom *Stack
}
func (s *Stack) Empty() bool {
	return s == nil || s.bottom == nil
}
func (s *Stack) Peek() interface{} {
	return s.top
}
func (s *Stack) Pop() *Stack {
	return s.bottom
}