Move watched to seperate package, Starting on #285
Resolves #292, Trying to make possible multiple subscribers #285
Also if there is a watcher on a directory and we wan't to watch on of the
files inside the directory to we won't create new watcher
Enhanced watching directroies
if we have watchers on file /a/b.txt and /a/c.txt
After calling Watch() function on /a (The directory)
we will remove the watchers on the files and we will just watch the
parent directory
Use separate testdata for watcher
Completed tests for observer
Added type watcher and moved watch functions under created type
Changed watcher package name to watch
Changed tests to use watcher type
Replace DeepEqual witch custom exist function
DeepEqual checks the order to but we don't need the orders
be the same just the matching the items are enough.
TestDelete event was failing because of the lockers fixed that to
Exported watcher type cleaned some ifs
New Watched interface, required by Watch & UnWatch
Introduced new Watched interface with two Path and Reload methods.
before this for watching a path and an action of type func() was
needed but now we should pass a type witch implements Watched
interface. This helps with having multi-subscribers for each path
also removing subscribers are easier now.
Also added new WatchedDir type which implements Watched interface,
This is a helper type for watching directories with no action.
Changed all Path() Methods to Name() and all path variables to name
Adapting backend package with new watch package
Fixed data races in watch_test
Adapting sublime package with new watch package
Merging changes from master
Fixed watching directory bug
On watching directory the fired event name(ev.Name) matches changed file
name not the directory name and the way Observe function worked before
was finding action from event name so the watched directory actions never
could be found, Now we will find actions from event name and event name
directory. The TestObserveDirectory changed to check this to.
Added some documentation for new types
Return error from Watch && UnWatch
Why is travis failing on TestDeleteEvent
Changed the way of watching + some cleaning
Replaced type Watched and []Watched with  new type action and actions
So know any type of func() could be passed as an action also each action
has a key as an identifier so we can remove a specific subscriber also
it's possible to add action for certain events not all of them