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`
The Mike's markdown display in the REPL seems to work, so that would probably be a good start.  But by the sounds of your comments in the issue you know much more than I.

And yes, a different storage format would be good, or it could be part of the pre-compilation the rest of base goes through.  It would be nice if it was 100% julia though, so some pre-compiled database might be best.  Michael also had some thoughts on when to load package documentation: https://gist.github.com/MichaelHatherly/7fb3ee1461eac9e02020