Add illegal metric label validation on register.

This commit introduces the semantic check we discussed on the mailing
list, whereby label names set with "__" prefix are declared as illegal
to the user.
Merge pull request #11 from prometheus/feature/namespace-validations

Add illegal metric label validation on register.
Update metric name label to "__name__".
Improve the user documentation.

This commit fixes a couple of typos in the Javadoc, which resulted
from an automatic refactor process done in IntelliJ.  Documentation
should be more straightforward for users now!

Secondarily, the base README now includes notes about how to perform
releases and documentation updates if the engineer is somewhat
unfamiliar with Maven.
Merge pull request #13 from prometheus/feature/documentation/refresh-and-use-generated-assets

Improve the user documentation.
# This is a combination of 3 commits.
# The first commit's message is:
WIP - DONOTSUBMIT

This commit introduces HotSpot JVM monitoring through the low-level
"jvmstat" interfaces, which are exposed through the MMAPed "HSPerfData"
file.  jvmstat offers much more detailed analysis of the internals of
VM health than MX management beans or even JMX ever could.

= TODO Before Final Review
- Implement metric visitor.
- Expose survivor space agetable cohort metrics as canonical example.
- Clean up POM nastiness and reconcile any dependencies that the test
  environment may need.

# This is the 2nd commit message:

Checkpoint.

# This is the 3rd commit message:

Checkpoint.
This commit introduces HotSpot JVM monitoring through the low-level
"jvmstat" interfaces, which are exposed through the MMAPed "HSPerfData"
file.  jvmstat offers much more detailed analysis of the internals of
VM health than MX management beans or even JMX ever could.

= Milestone for Next Iterations (Need to start code review now.)
- Full documentation of the metrics and what they mean with backtracked
  links into HotSpot source code.  I have most of this information in
  the form of raw notes, so annotation shouldn't take too long.
Merge pull request #10 from prometheus/feature/instrumentation/hotspot-jvmstat

Provide Exposition of "jvmstat" Metrics
Include Maven artifacts in .gitignore blacklist

The Maven output should never distract us.
Include JCIP annotations for fundamentals types.

For some of the base metric types, we already had Java Concurrency in
Practice annotations, but they were not comprehensively canvassed.  In
the interests of promoting Javadoc documentation that is completely
self-contained, they should continue to be used.
Enhance clarity in notes about metric export.

The original Metric export documentation was a little ambiguous in
parts.  This commit strengthens the optionalness of the use of the
runtime annotations but notes the legitimate use cases of it whereby
the Virtual Machine Specification will fall short and neither load nor
initialize classes of interest that may have metrics defined that an
application's consumer may care about.

This is likely to be a corner case that most users of Prometheus will
hopefully never encounter.  One cannot be too sure, though, with how
some of dynamic languages built on top of the Java Virtual Machine
generate their output classes, so this mechanism is offered as a
fallback.

In short, using this annotation is a good and safe practice.  Not
using it is fine in most cases but can put you at the perils of the
VMS and its loader behaviors.
Internalize the internal telemetry for Prometheus.

The class that defines the internal telemetry for Prometheus ought to
have remained invisible to outside users---namely the case of Javadoc
readers.  It has been turned to package private ("default access") to
support this use case.
Fix broken API contract for metric cloning.

The ``Metric`` primitives support cloning of their mutation objects
by means of a call to ``Metric.Child#clone``.  This has been an code path that
has seldom been used but was explicitly asked for by prospective users.
Unfortunately it was not tested thoroughly until recently, when it was
discovered that the exposed protocol to API consumers results in

    Counter.Child#clone()  // yields Metric.Child
    Gauge.Child#clone()    // yields Metric.Child
    Summary.Child#clone()  // yields Metric.Child

and not

    Counter.Child#clone()  // yields Counter.Child
    Gauge.Child#clone()    // yields Gauge.Child
    Summary.Child#clone()  // yields Summary.Child

This commit adds elementary workflow cases to ensure the promise of the
API.
Enhance the retention of jvmstat Monitors.

The original implementation re-extracted all internal jvmstat monitors
from the virtual machine on every exposition request.  This may have
been wasteful, so the monitors are retained between exposition requests
and are periodically updated to include an overall superset.
Merge pull request #16 from prometheus/fix/api/broken-contract

Fix broken API contract for metric cloning.
Merge pull request #17 from prometheus/refactor/keep-internals-internal

Internalize the internal telemetry for Prometheus.
Merge pull request #18 from prometheus/feature/documentation/enhance-registration-annotation-documentation

Enhance clarity in notes about metric export.
Merge pull request #19 from prometheus/feature/documentation/jcip-annotations

Include JCIP annotations for fundamentals types.
Merge pull request #20 from prometheus/fix/packaging/expand-git-ignore-scope

Include Maven artifacts in .gitignore blacklist
Merge pull request #21 from prometheus/refactor/jvmstat/retention

Enhance the retention of jvmstat Monitors.