Basic project setup (#4)

diff --git a/pylintrc b/pylintrc
new file mode 100644
index 0000000..1a47c02
--- /dev/null
+++ b/pylintrc
@@ -0,0 +1,164 @@
+[MASTER]
+# Add files or directories to the blacklist. They should be base names, not
+# paths.
+ignore=CVS,.git,.cache,.tox,.nox
+
+# List of plugins (as comma separated values of python modules names) to load,
+# usually to register additional checkers.
+# DEFAULT:  load-plugins=
+# RATIONALE: We want to make sure our docstrings match the objects
+#            they document.
+load-plugins=pylint.extensions.check_docs
+
+[MESSAGES CONTROL]
+# Disable the message, report, category or checker with the given id(s). You
+# can either give multiple identifiers separated by comma (,) or put this
+# option multiple times (only on the command line, not in the configuration
+# file where it should appear only once).You can also use "--disable=all" to
+# disable everything first and then reenable specific checks. For example, if
+# you want to run only the similarities checker, you can use "--disable=all
+# --enable=similarities". If you want to run only the classes checker, but have
+# no Warning level messages displayed, use"--disable=all --enable=classes
+# --disable=W"
+#
+# RATIONALE:
+# - maybe-no-member:  bi-modal functions confuse pylint type inference.
+# - no-member:  indirections in protobuf-generated code
+# - protected-access: helpers use '_foo' of classes from generated code.
+# - similarities:  'Bucket' and 'Blob' define 'metageneration' and 'owner' with
+#                  identical implementation but different docstrings.
+# - star-args:  standard Python idioms for varargs:
+#                  ancestor = Query().filter(*order_props)
+# - redefined-variable-type: This error is overzealous and complains at e.g.
+#                      if some_prop:
+#                          return int(value)
+#                      else:
+#                          return float(value)
+# - import-error: imports are checked via tests.
+# - wrong-import-position: This error is overzealous. It assumes imports are
+#                          completed whenever something non-trivial is
+#                          defined, e.g.
+#                              try:
+#                                  from foo import Bar
+#                              except ImportError:
+#                                  class Bar(object):
+#                                      """Hi everyone"""
+#                          and thus causes subsequent imports to be
+#                          diagnosed as out-of-order.
+# - no-name-in-module: Error gives a lot of false positives for names which
+#                      are defined dynamically. Also, any truly missing names
+#                      will be detected by our 100% code coverage.
+# - locally-disabled: Allow us to make exceptions in edge cases, notably where
+#                     pylint doesn't recognize inherited properties and methods
+#                     and gives unused-argument errors.
+# TEMPORARILY DISABLE AND SHOULD BE REMOVED:
+# - fixme: disabled until 1.0
+#
+disable =
+    import-star-module-level,
+    old-octal-literal,
+    oct-method,
+    print-statement,
+    unpacking-in-except,
+    parameter-unpacking,
+    backtick,
+    old-raise-syntax,
+    old-ne-operator,
+    long-suffix,
+    dict-view-method,
+    dict-iter-method,
+    metaclass-assignment,
+    next-method-called,
+    raising-string,
+    indexing-exception,
+    raw_input-builtin,
+    long-builtin,
+    file-builtin,
+    execfile-builtin,
+    coerce-builtin,
+    cmp-builtin,
+    buffer-builtin,
+    basestring-builtin,
+    apply-builtin,
+    filter-builtin-not-iterating,
+    using-cmp-argument,
+    useless-suppression,
+    range-builtin-not-iterating,
+    suppressed-message,
+    no-absolute-import,
+    old-division,
+    cmp-method,
+    reload-builtin,
+    zip-builtin-not-iterating,
+    intern-builtin,
+    unichr-builtin,
+    reduce-builtin,
+    standarderror-builtin,
+    unicode-builtin,
+    xrange-builtin,
+    coerce-method,
+    delslice-method,
+    getslice-method,
+    setslice-method,
+    input-builtin,
+    round-builtin,
+    hex-method,
+    nonzero-method,
+    map-builtin-not-iterating,
+    maybe-no-member,
+    no-member,
+    protected-access,
+    similarities,
+    star-args,
+    redefined-variable-type,
+    import-error,
+    wrong-import-position,
+    no-name-in-module,
+    locally-disabled,
+    fixme
+
+
+[REPORTS]
+# Tells whether to display a full report or only the messages
+# RATIONALE: noisy
+reports=no
+
+[BASIC]
+# Regular expression matching correct method names
+# DEFAULT:  method-rgx=[a-z_][a-z0-9_]{2,30}$
+# RATIONALE:  Some methods have longer names to be more descriptive or precise,
+# especially those that implemented wordy RFCs.
+method-rgx=[a-z_][a-z0-9_]{2,40}$
+
+# Regular expression matching correct function names
+# DEFAULT function-rgx=[a-z_][a-z0-9_]{2,30}$
+# RATIONALE:  Some methods have longer names to be more descriptive or precise,
+# especially those that implemented wordy RFCs.
+function-rgx=[a-z_][a-z0-9_]{2,40}$
+
+[TYPECHECK]
+# List of module names for which member attributes should not be checked
+# (useful for modules/projects where namespaces are manipulated during runtime
+# and thus existing member attributes cannot be deduced by static analysis. It
+# supports qualified module names, as well as Unix pattern matching.
+# DEFAULT:  ignored-modules=
+# RATIONALE:  six aliases stuff for compatibility.
+#             google.protobuf fixes up namespace package "late".
+ignored-modules = six, google.protobuf
+
+
+[DESIGN]
+# Minimum number of public methods for a class (see R0903).
+# DEFAULT:  min-public-methods=2
+# RATIONALE:  context mgrs may have *no* public methods
+min-public-methods=0
+
+# Maximum number of arguments for function / method
+# DEFAULT:  max-args=5
+# RATIONALE:  Many credentials classes take a lot of parameters.
+max-args = 10
+
+# Maximum number of attributes for a class (see R0902).
+# DEFAULT:  max-attributes=7
+# RATIONALE:  Many credentials need to track lots of properties.
+max-attributes=15