(PUP-1799) Pull implementation into pops

This is the first step toward pulling apart the public function
interface from the underlying impelementation. The parts of
Puppet::Functions are the user-facing API, whereas the parts in
Puppet::Pops::Functions are the underlying implementation.
(PUP-1799) Remove undocumented and unused dispatch

The define_dispatch wasn't documented nor used.
(PUP-1799) Remove polymorphic dispatch

Polymorphic dispatch isn't really needed since you can just as easily
setup multiple dispatches using the regular dispatch mechanism.
(PUP-1799) Remove exposure of TypeFactory in Functions

This removes the access to all of the TypeFactory methods in the
Function interface. Users will have to use either the basic ruby types
(String, Integer, Fixnum, etc.) or use strings to specify the puppet
types ('Enum["a", "b"]', 'String', etc.). This reduces the API that
users will have to deal with and which we expose from the internals of
puppet.
(maint) Reformat to 80 chars wide
(PUP-1799) Split Public from Private Function API

This splits the public "dispatch" api for defining functions from the
public "injection" api. The injection API is still in flux and should
only be used for writing "system" functions. This places it behind a
little bit of a barrier to make the different APIs clearer.
(PUP-1799) Rewrap some longer comments
(PUP-1799) Clarify public/private portions of the Functions API

Moved attribute/parameter injection support and docs to the tail end of the
file, and marked api private.  Also went through and designated the
public methods of the Functions API (create_function(), and the methods
such as dispatch(), param() and so forth which may be used to build up
dispatching for a function).
(PUP-1799) Add warning messages to docs

These APIs are still under development, but will be part of the next
release. This tries to give any users warning that they might change at
any time.
(maint) Fix typo
(maint) Remove reference to type factory

The type factory methods are no longer exposed in the function API.
There was a sentence that still refered to that however.
(maint) Mark Function impl public

The implementation base class for functions is public since it will be
needed by any function implementation.
(PUP-1799) Rename to InternalFunction

The InjectedFunction name wasn't very descriptive and also didn't
provide a good indication to external users that it shouldn't be
touched. This changes the name to InternalFunction.
(PUP-1799) Remove support for ruby types

The param specifications used to allow using the ruby types in addition
to strings specifying the puppet types. This made it hard to explain the
API as well as probably would lead to some surprises since the
translation from the ruby types to the puppet types is not always the
most straightforward.

In order to just side step all of those problems, this simply removes
that support.

In addition it pulls out the construction of the type parser so that it
is held on to for the entire function creation.
(PUP-1799) Restrict function base classes

There are assumptions throughout the system that functions are derived
from Puppet::Pops::Functions::Function. This adds a check to ensure that
any functions that are created are derived from that.
(maint) Rework documentation for functions

This moves around and rewrites large parts of the documentation for
functions to try to make them a little more clear about how to use
functions. It also makes the functions show up properly in yard.
(maint) Fix various typos and problems in docs

Some typos, as per usual from my drafts. This also removes some
references to the injection feature, which is only part of internal
functions. Since that API is going to probably be going through some
more changs, I decided to simply remove the information rather than have
it keep becoming out of date.
(maint) Remove reference to README_DEVELOPER

The README_DEVELOPER.md document went away a while ago. Yard was issuing
a warning because it was told about that file specifically, but it
didn't exist.
(maint) Get Puppet::Pops::Functions to show in yard

Since Pops and friends were not marked with an @api tag they were not
showing up in the yard output. This changes them so that they are marked
@api public, with the caveat that it is still experimental.
(maint) Fix display of warning on Internal*

Surrounding a bit of text with `=====` creates strange markdown results.
Converting it to a `@note`