   ```
 
   The spec can be passed as either an explicit map or as keyword arguments:
-
   ```
   (schedule #(println \"I'm running!\")
     :at \"08:00\"

  ```

  Optional helper functions can be combined to create the spec as well:

  ```
  (schedule #(println \"I'm running!\")
    (-> (in 5 :minutes)

  "Schedules a function to run according to a specification map
  comprised of any of the following keys:

  * :in - a period after which f will be called
  * :at - a time after which f will be called
  * :every - the period between calls 
  * :until - stops the calls at a specific time
  * :limit - limits the calls to a specific count
  * :cron - calls f according to a [Quartz-style](http://quartz-scheduler.org/documentation/quartz-2.2.x/tutorials/tutorial-lesson-06) cron spec

  Units for periods (:in and :every) are milliseconds, but can
  also be represented as a keyword or a vector of number/keyword
  pairs, e.g. `[1 :week, 4 :days, 2 :hours, 30 :minutes, 59 :seconds]`.

  Date/Time values (:at and :until) can be a `java.util.Date`,
  millis-since-epoch, or a String in `HH:mm` format.

  For example:
  ```
  (schedule #(println \"I'm running!\")
    {:in [5 :minutes]
