Environment abstraction layer and browser factories

Implemented Environment to better encapsulate environment configuration
and allow for easy switching between different contexts (different
users, wikis, etc.) without relying on mutating the global state of ENV.
It also helps one to avoid coupling in step definitions by supplying
helpers such as `as_user(:b)` or `on_wiki(:b)` to replace references to
specific application state (e.g. 'Given I'm logged in as "Specific
User").

Implemented BrowserFactory classes to provide an environment "binding"
system by which one can customize the browser options before it's
instantiated/opened using settings passed in via environment variables.

Refactored loading of MediawikiSelenium classes and implementation to
use autoload. Avoid loading of cucumber-related definitions (steps, env,
hooks, etc.) so that the library can be loaded in other contexts (e.g.
for testing the framework itself).

Started writing specs.

Change-Id: I1a3aa64b8fdca73aff2778ec12143a8789e4843f