text: Title: [BUG] ai init sequence not pay-as-you-go
  Body: **Describe the bug**
  
  When creating Graphistry objects (`graphistry.bind(...)`), the ai mxins (featureutils, ...) init, and when something like umap, call all the way into third party libs (`umap.UMAP`). This is at minimum a performance regression (unclear how big), but also a complexity issue with the mixin flow. We've seen bugs where init code in a mixin breaks otherwise unrelated code.
  
  **Expected behavior**
  
  Mixins should be pay-as-you-go. For example, umap init can be deferred to the first umap call.
  
  ```python
  class UMAPMixin(object):
      def __init__(...):
         #remove umap.UMAP(...) calls that impact non-umap calls
         pass
  
     def umap(...):
        lazy_init()
  ```
  
  cc + @silkspace 
  