VOL-1497 : Add more control to kv/memory access

- Added kv locking mechanism (etcd only)
- (watch) control path access whenever possible
- (watch) use a transaction for updates and merge with memory
- cleaned up vendoring
- misc changes to fix exceptions found along the way

Amendments:

- Copyright header got removed in auto-generated file
- Changed default locking to false for KV list operation
- Updated backend api to allow the passing of locking parameter

Change-Id: Ie1a55d3ca8b9d92ae71a85ce42bb22fcf1419e2c
diff --git a/vendor/go.uber.org/atomic/string.go b/vendor/go.uber.org/atomic/string.go
index acf0f5b..ede8136 100644
--- a/vendor/go.uber.org/atomic/string.go
+++ b/vendor/go.uber.org/atomic/string.go
@@ -20,10 +20,8 @@
 
 package atomic
 
-import "sync/atomic"
-
-// String is an atomic type-safe wrapper around atomic.Value for strings.
-type String struct{ v atomic.Value }
+// String is an atomic type-safe wrapper around Value for strings.
+type String struct{ v Value }
 
 // NewString creates a String.
 func NewString(str string) *String {
@@ -44,7 +42,7 @@
 }
 
 // Store atomically stores the passed string.
-// Note: Converting the string to an interface{} to store in the atomic.Value
+// Note: Converting the string to an interface{} to store in the Value
 // requires an allocation.
 func (s *String) Store(str string) {
 	s.v.Store(str)