Per-spider settings and api cleanup: sep#19 update

I'm submitting the update of sep#19 that I proposed on GSoC.

Changes in the previous version of this sep were detailed and extended with implementation suggestions, backward compatibility concerns and issues that may arise.

There are no substantial modifications with the repository version of the proposal, except a tentative ``SettingsLoader`` and ``SettingsReader`` interaction using a method that freezes the former into an instance of the latter. I'm not satisfied with that approach as it introduces a lot of overhead to settings modification and crawling using the API on users' side. For example, crawlers are created with an instance of the reader class, but if users want to modify settings they can only do this in a loader instance, this distinction is not practical and seems a little inconsistent. Between this options I rather keep a single Settings class and try to distinguish loader and reader tasks in another way if that's really necessary.

These months I'll be coding those features/refactors based on this document, so early feedback is greatly appreciate it.