clone: wrap clone_into()

This allows the user to prepare the repository and remote with whichever
custom settings they want before performing the "clone" proper.
Index: add failing tests for a standalone Index

The index can exist purely as a data structure. Let's test that so we
make sure we support that.
Index: make the file optional

There is no obligation for an index to exist as a file at all.
Index: accept a tree for read_tree()

An index may not have an associated repository, so giving it an id in
that case is useless. Raise an error in that case and accept a Tree
object to make the function useful then.
Rewrite init_repository using cffi
init_repository now wraps git_repository_init_ext

Fixes #347
Merge remote-tracking branch 'upstream/master' into development

Conflicts:
	pygit2/decl.h
	test/test_repository.py
Adjust to clone_into signature change