redesign: configuration updates to support full digesting

This has a few small changes wrapped up in it.  First, Dassets now
uses a Config *instance* for storing its configuration (as opposed
to the `Config` singleton directly).  This ensures a clean config
state and allows testing on config instances and not messing with
the singleton state in tests.

Also, this has a few new config values: source_path, output_path,
digests_path.  `digests_path` replaces the deprecated `digests_file_path`.
The other additional configs allow for better source handling and
output generation.
Merge pull request #23 from redding/kr-reconfig

redesign: configuration updates to support full digesting
redesign: read source list on init

This adds source list handling.  On init, the source list is read
and filtered based on the config.  By default, only files are
included in the source path list and any paths in the output path
are removed.  In addition the source filter is applied to the path
list.

This is the new way Dassets knows which files to digest or host
with the middleware.
Merge pull request #24 from redding/kr-re-sourcelist

redesign: read source list on init
rename digests_file to digests

Shorter name.  Not so concerned with the fact that this is backed
by a file - more importantly it just models the digested files, or
"digests".
cleanups to digests modeling

Removed some unneeded methods and tried to simplify the api.  This
is prepping for the new compile behavior.  The digests stores the
previous compile state and is needed for pruning old compiled files
from the output on compile.

This is, of course, in addition to its asset file handling for the
middleware.
Merge pull request #26 from redding/kr-re-digests

redesign: digests model
base Engine class and NullEngine implementation

This is the base Engine for compiling and processing assets.  It
defines the API for an engine and should be subclassed when creating
new engines.

This also includes the NullEngine implementation.  It simply returns
exactly what it is given and can be thought of as a - it does nothing.
This will be used as the default engine for compiling assets.
rename config `sources` to just `source`

Little more straightforward since it is just a macro for setting
`source_path` and `source_filter` in DSL kinda way.
config api for registering engines

This adds an api to config for registering new engines with Dassets.
Registering involves building an instance of an Engine and associating
it with an input extension.  Engines can be looked up using the
`engines` reader on the config.

Engine authors would use this API to register their engines at
require-time, with something like:

```
require 'dassets'
Dassets.config.engine 'myext', Dassets::MyEngine, {'some' => 'opts}
``
Merge pull request #27 from redding/kr-re-engine

redesign: compile Engine definition and registration API
source file handler

This class is responsible for handling the digesting of source
files.  Digesting involves compiling the source through any engines,
fingerprinting the compiled output, and formatting the digest path
appropriately.

This handler class will be used by the compile command to get source
information and write it to the outputs appropriately.
Merge pull request #28 from redding/kr-re-sourcefile

source file handler
Switch to using `config.output_path` instead of deprecated `files_path`

This rename and reuse more aptly describes the nature of the files
in play.  These are the files that have been output by the digest
process.

In addition, this renames the asset file `cache_path` property to
`url`.  Cache path really doesn't describe the intent of this property
from the asset file's perspective.  From the asset file's perspective
this property is the URL used to compose the files `href`.  What
you do with the property (ie use it to cache or whatever) is not the
asset file's concern.
Merge pull request #29 from redding/kr-re-assetfile

Switch to using `config.output_path` instead of deprecated `files_path`
redesign: source file `digest` method

This method digests a source file, meaning it compiles its content,
saves it to the output path, and updates/saves its fingerprint in
the digests file.
Merge pull request #30 from redding/kr-re-sourcefiledigest

redesign: source file `digest` method
Redesigned `digest` cmd

This new digest cmd compiles, fingerprints, and outputs source
files.  You can run it via the cli with `dassets digest [PATHS] or
programmatically with `Dassets.digest(paths)`.
Merge pull request #31 from redding/kr-re-compile

Redesigned `digest` cmd
redesign: tweak digest cmd implementation to always use active state

Was running into problems b/c the modifications made by the digest
cmd weren't on the active objects in use by Dassets.

This just simplifies and cleans things up to always use the active
(ie global) state when digesting.