Refactor document initialize

Use seperate arguments instead of hash to reduce verbosity.

This causes great changes to the API of the `Document` class, therefore, if merged, you should bump your major version according to http://semver.org/