WIP/RFC: metadata implemented, REPL-help ported, user-made doc now possible (issue #3988)

(updated 30 Jan)

I added basic support to associate metadata with most objects using @stevengj's suggested global dict as backend. It is really rather quite trivial but seems to work fine (except below issues).  I use a function interface to the `META` dict so the backend could be changed. So, main thing here is whether we're happy with that function-interface or not.

As illustration of its power ;-), I ported the existing REPL-help system over into this system and it works as before, except that user-made help is now possible. I'll post a usage-demo to #3988.  The help system as in this pull-request is *not* meant to stay like that.  It's thought as a transitional state to something fancy.

So:
1) Added basic support to associate metadata to most objects. The data is stored in the `ObjectIdDict` `Base.META`.  However, interaction should be done through the functions:  `getmeta`, `setmeta!` & `hasmeta`

2) Ported the existing REPL-help system over to work with this system.
   - `help` and `?` work as before (except 3-objects don't work, see test/help.jl)
   - user-made help is now possible through a `@doc`-macro and `doc`-function
   - Documentation of objects is kept in the metadata storage.
     Documentation of non-objects, e.g. keywords, and macros
     is kept in: `Base.Help.NONOBJ_DICT`.

Issues:
- every now and then I get a `ERROR: BoundsError()` when initializing the help from helpdb.jl
- There is a strange bug with `eval` not picking up its documentation, no idea why.
- how can macros be referred to, other than representing them as a string?
  - I use now a separate Dict with string-keys for documenting macros and non-objects: keywords, `&&`, etc.
- should some functions take the metadata into account? Examples are:
   - `copy`, `deepcopy`, `sizeof`
Would be nice to have a version of `help` that calls `display` rather than `print`, to support the display of formatted help (e.g. future Markdown help).   

e.g. define `help(obj)` to just return the help, and `help(io, obj) = print(io, help(obj))`.