Add in-mem cache and remove file syncing; fix issues with do! :value

* Use an in-memory cache to prevent unnecessary compilation of hoplon
  files, using last modified time to determine whether the source file
  has changed. This is enabled by default but can be disabled by setting
  the `:cache` option to `false` in the hoplon compiler options passed
  to the hoplon task (or directly to the compiler).

* The `:value` dispatch method for the `do!` multimethod had a bug
  wherein `(do! elem :value)` was setting the element's value to `nil`
  instead of getting the value.