Refactor s:add function
Avoid echoerr inside catch block
Performace tuning: inlining some function calls
Performance tuning: reduce the number of globpath calls
Change error reporting method

As suggested by @vheon:
https://github.com/junegunn/vim-plug/pull/40#issuecomment-50278543
Code cleanup: reuse s:trim() when possible
Use dot operator instead of get()

The reason I used get() instead of concise dot operator when accessing
`frozen` and `local` properties of plugin spec was to avoid errors when
a user "PlugUpgrade" from an old version of vim-plug whose g:plugs does
not have those properties. Added the code to patch the old version of
g:plugs so that we can safely use dot operators.
Performance tuning: reduce the number of s:parse_options calls
Use fnamemodify instead of split hackery

Simpler and faster
Define a separate version of s:is_local_plug for Windows
Use single-quotes whenever possible for consistency
Replace s:extract_name with a single fnamemodify call
Unmap / and ? from vim-oblique after test
Inline substitute inside s:dirpath()
Merge branch 'vheon-refactoring' into refactoring