Rework elf::program's API

This is patch v2, incorporating most of the comments from the previous round.

Solves issue #47:

elf::program's API - add_object() and remove_object() was problematic in
two respects:

1. It did not do reference-counting on the loaded object, so if add_object()
   was done 5 times, a single remove_object() would unmap the object and
  its 4 other users will crash.

2. It is un-C++-like.

This patch replaces these two functions by a single function get_library():

  std::shared_ptr<elf::object>
   get_library(std::string lib, std::vector<std::string> extra_path = {});

get_library() returns a shared_ptr, which is reference counting and does
proper C++-style RAII. For example in the code:

	auto lib = elf::get_program()->get_library(path);
	auto main = lib->lookup<int (int, char**)>("main");
	int rc = main(argc, argv);

once lib out of scope, the reference count of the elf::object automatically
goes down, and if nobody else holds another shared-pointer to the same
library, the object is destroyed (causing the shared library to be unloaded).

This patch also documents, with Doxygen, all the functions it touches.

IMPORTANT NOTE: This reference count is completely unrelated to the issue
of concurrent use of dlopen()/dlclose()/dl_iterate_phdr(), which is still
buggy and we need to fix (I have a patch for that, but it's too long to fit
in the margin).

Signed-off-by: Nadav Har'El <nyh@cloudius-systems.com>