fixed several PEP8 violations
removed docstring clearly inherited from contrib code
full refactor of github web hook:
  - removed unnecessary time conversions and replace it with
    dateutil.parser
  - updated dictionary keys that were hitting deprecation warnings (who
    and when for author and when_timestamp)
  - reindentation and other code sanitize
added bitbucket web status hook
Add option to 'Rebuild' button to build updated sources

Right now the Rebuild button builds the exact same checkout as another build. This makes it difficult
for the following workflow:
 * run a build on a branch; it fails
 * fix the branch it built
 * hit "rebuild" -> but it builds the original revision
unit tests on 'buildslave upgrade' command

Test that older buildbot.tac files are updated correctly.
Test that modern buildbot.tac files are not changed.
Merge branch 'bitbucket' of git://github.com/DamnWidget/buildbot
#
# It looks like you may be committing a merge.
# If this is not correct, please remove the file
#	.git/MERGE_HEAD
# and try again.

# Please enter the commit message for your changes. Lines starting
# with '#' will be kept; you may remove them yourself if you want to.
# An empty message aborts the commit.
# On branch master
# All conflicts fixed but you are still merging.
#   (use "git commit" to conclude merge)
#
# Changes to be committed:
#
#	new file:   master/buildbot/status/web/hooks/bitbucket.py
#	modified:   master/buildbot/status/web/hooks/github.py
#	new file:   master/buildbot/test/unit/test_status_web_change_hooks_bitbucket.py
#	modified:   master/buildbot/test/unit/test_status_web_change_hooks_github.py
#	modified:   master/docs/manual/cfg-changesources.rst
#	modified:   master/docs/manual/cfg-statustargets.rst
#
add relnotes for previous commit
Merge branch 'RebuildOptions' of git://github.com/jaredgrubb/buildbot

#
# It looks like you may be committing a merge.
# If this is not correct, please remove the file
#	.git/MERGE_HEAD
# and try again.

# Please enter the commit message for your changes. Lines starting
# with '#' will be kept; you may remove them yourself if you want to.
# An empty message aborts the commit.
# On branch master
# All conflicts fixed but you are still merging.
#   (use "git commit" to conclude merge)
#
# Changes to be committed:
#
#	modified:   master/buildbot/process/builder.py
#	modified:   master/buildbot/status/web/build.py
#	modified:   master/buildbot/status/web/templates/forms.html
#	modified:   master/docs/relnotes/index.rst
#

# Please enter the commit message for your changes. Lines starting
# with '#' will be kept; you may remove them yourself if you want to.
# An empty message aborts the commit.
# On branch master
# Changes to be committed:
#   (use "git reset HEAD^1 <file>..." to unstage)
#
#	modified:   master/buildbot/process/builder.py
#	modified:   master/buildbot/status/web/build.py
#	modified:   master/buildbot/status/web/templates/forms.html
#	modified:   master/docs/relnotes/index.rst
#
Extend the reconfig timer when certain progress lines are seen
Merge branch 'slave-upgrade-tests' of git://github.com/elmirjagudin/buildbot
#
# It looks like you may be committing a merge.
# If this is not correct, please remove the file
#	.git/MERGE_HEAD
# and try again.

# Please enter the commit message for your changes. Lines starting
# with '#' will be kept; you may remove them yourself if you want to.
# An empty message aborts the commit.
# On branch master
# All conflicts fixed but you are still merging.
#   (use "git commit" to conclude merge)
#
# Changes to be committed:
#
#	modified:   ../slave/buildslave/test/unit/test_scripts_upgrade_slave.py
#	modified:   ../slave/buildslave/test/util/misc.py
#
Merge branch 'ExtendReconfig' of git://github.com/jaredgrubb/buildbot
#
# It looks like you may be committing a merge.
# If this is not correct, please remove the file
#	.git/MERGE_HEAD
# and try again.

# Please enter the commit message for your changes. Lines starting
# with '#' will be kept; you may remove them yourself if you want to.
# An empty message aborts the commit.
# On branch master
# All conflicts fixed but you are still merging.
#   (use "git commit" to conclude merge)
#
# Changes to be committed:
#
#	modified:   master/buildbot/scripts/logwatcher.py
#
add relnotes for previous
schedulers must call parent de/activate methods

# Please enter the commit message for your changes. Lines starting
# with '#' will be kept; you may remove them yourself if you want to.
# An empty message aborts the commit.
# Not currently on any branch.
# You are currently editing a commit while rebasing branch 'nine' on '924c5e3'.
#
# Changes to be committed:
#   (use "git reset HEAD^1 <file>..." to unstage)
#
#	modified:   master/buildbot/schedulers/base.py
#	modified:   master/buildbot/schedulers/basic.py
#	modified:   master/buildbot/schedulers/dependent.py
#	modified:   master/buildbot/schedulers/timed.py
#	modified:   master/buildbot/schedulers/trysched.py
#	modified:   master/buildbot/test/util/scheduler.py
#	modified:   master/docs/developer/schedulers.rst
#
don't assert on JSONRPC error message contents, which depend on JSON parser
Merge branch 'master' into nine

Conflicts:
	master/buildbot/process/builder.py
#
# It looks like you may be committing a merge.
# If this is not correct, please remove the file
#	.git/MERGE_HEAD
# and try again.

# Please enter the commit message for your changes. Lines starting
# with '#' will be kept; you may remove them yourself if you want to.
# An empty message aborts the commit.
# On branch nine
# All conflicts fixed but you are still merging.
#   (use "git commit" to conclude merge)
#
# Changes to be committed:
#
#	modified:   master/buildbot/buildslave/openstack.py
#	modified:   master/buildbot/changes/mail.py
#	modified:   master/buildbot/process/properties.py
#	modified:   master/buildbot/schedulers/basic.py
#	modified:   master/buildbot/schedulers/dependent.py
#	modified:   master/buildbot/schedulers/timed.py
#	modified:   master/buildbot/schedulers/trysched.py
#	modified:   master/buildbot/scripts/logwatcher.py
#	modified:   master/buildbot/status/build.py
#	modified:   master/buildbot/status/web/baseweb.py
#	modified:   master/buildbot/status/web/build.py
#	new file:   master/buildbot/status/web/files/exception_large.png
#	new file:   master/buildbot/status/web/files/exception_normal.png
#	new file:   master/buildbot/status/web/files/exception_small.png
#	new file:   master/buildbot/status/web/files/failure_large.png
#	new file:   master/buildbot/status/web/files/failure_normal.png
#	new file:   master/buildbot/status/web/files/failure_small.png
#	new file:   master/buildbot/status/web/files/readme_svg.txt
#	new file:   master/buildbot/status/web/files/retry_large.png
#	new file:   master/buildbot/status/web/files/retry_normal.png
#	new file:   master/buildbot/status/web/files/retry_small.png
#	new file:   master/buildbot/status/web/files/skipped_large.png
#	new file:   master/buildbot/status/web/files/skipped_normal.png
#	new file:   master/buildbot/status/web/files/skipped_small.png
#	new file:   master/buildbot/status/web/files/status.svg
#	new file:   master/buildbot/status/web/files/status_large.svg
#	new file:   master/buildbot/status/web/files/status_small.svg
#	new file:   master/buildbot/status/web/files/success_large.png
#	new file:   master/buildbot/status/web/files/success_normal.png
#	new file:   master/buildbot/status/web/files/success_small.png
#	new file:   master/buildbot/status/web/files/unknown_large.png
#	new file:   master/buildbot/status/web/files/unknown_normal.png
#	new file:   master/buildbot/status/web/files/unknown_small.png
#	new file:   master/buildbot/status/web/files/warnings_large.png
#	new file:   master/buildbot/status/web/files/warnings_normal.png
#	new file:   master/buildbot/status/web/files/warnings_small.png
#	modified:   master/buildbot/status/web/grid.py
#	new file:   master/buildbot/status/web/hooks/bitbucket.py
#	modified:   master/buildbot/status/web/hooks/github.py
#	new file:   master/buildbot/status/web/pngstatus.py
#	modified:   master/buildbot/status/web/status_json.py
#	modified:   master/buildbot/status/web/templates/forms.html
#	modified:   master/buildbot/steps/shell.py
#	modified:   master/buildbot/test/unit/test_schedulers_manager.py
#	new file:   master/buildbot/test/unit/test_status_web_change_hooks_bitbucket.py
#	modified:   master/buildbot/test/unit/test_status_web_change_hooks_github.py
#	new file:   master/buildbot/test/unit/test_status_web_png_resource.py
#	modified:   master/buildbot/test/unit/test_steps_shell.py
#	modified:   master/buildbot/test/unit/test_util_ComparableMixin.py
#	modified:   master/buildbot/test/util/change_import.py
#	modified:   master/buildbot/util/__init__.py
#	new file:   master/docs/_images/success_normal.png
#	modified:   master/docs/developer/cls-forcesched.rst
#	modified:   master/docs/developer/cls-iproperties.rst
#	modified:   master/docs/developer/cls-irenderable.rst
#	modified:   master/docs/developer/utils.rst
#	modified:   master/docs/manual/cfg-buildsteps.rst
#	modified:   master/docs/manual/cfg-changesources.rst
#	modified:   master/docs/manual/cfg-properties.rst
#	modified:   master/docs/manual/cfg-statustargets.rst
#	modified:   master/docs/relnotes/index.rst
#	modified:   master/setup.py
#	new file:   slave/buildslave/scripts/create_slave.py
#	new file:   slave/buildslave/scripts/restart.py
#	modified:   slave/buildslave/scripts/runner.py
#	renamed:    slave/buildslave/scripts/startup.py -> slave/buildslave/scripts/start.py
#	new file:   slave/buildslave/scripts/stop.py
#	new file:   slave/buildslave/scripts/upgrade_slave.py
#	modified:   slave/buildslave/test/test_extra_coverage.py
#	new file:   slave/buildslave/test/unit/test_scripts_restart.py
#	modified:   slave/buildslave/test/unit/test_scripts_runner.py
#	new file:   slave/buildslave/test/unit/test_scripts_start.py
#	new file:   slave/buildslave/test/unit/test_scripts_stop.py
#	new file:   slave/buildslave/test/unit/test_scripts_upgrade_slave.py
#	modified:   slave/buildslave/test/util/misc.py
#
ChangeSources: implement the resource type in terms of the new data interfaces

This is modelled fairly closely to the Schedulers changes.

I've gone through all the CS classes and:

 - add a 'name' parameter, and generate one if it's not explicitly set. These will be used to 'claim' the CS for a particular master, so it needs to be meaningful in all cases.
 - use activate/deactivate to start and stop the CS. Usually this means just changing startService/stopService to activate/deactivate
ChangeSourceData: Address review comments