code: func (svmMap *serviceVMMap) add(id string) (svm *serviceVM, alreadyExists bool, err error) {
  	svmMap.Lock()
  	defer svmMap.Unlock()
  	if svm, ok := svmMap.svms[id]; ok {
  		if svm.refCount == 0 {
  			return svm.svm, true, errVMisTerminating
  		}
  		svm.refCount++
  		return svm.svm, true, nil
  	}
  
  	// Doesn't exist, so create an empty svm to put into map and return
  	newSVM := &serviceVM{
  		startStatus:  make(chan interface{}),
  		stopStatus:   make(chan interface{}),
  		attachedVHDs: make(map[string]*attachedVHD),
  		unionMounts:  make(map[string]int),
  		config:       &client.Config{},
  	}
  	svmMap.svms[id] = &serviceVMMapItem{
  		svm:      newSVM,
  		refCount: 1,
  	}
  	return newSVM, false, nil
  }
docs: // add will add an id to the service vm map. There are three cases:
  // 	- entry doesn't exist:
  // 		- add id to map and return a new vm that the caller can manually configure+start
  //	- entry does exist
  //  	- return vm in map and increment ref count
  //  - entry does exist but the ref count is 0
  //		- return the svm and errVMisTerminating. Caller can call svm.getStopError() to wait for stop